2015-12-18 2 views
0
#include <iostream> 
#include <cstdio> 
#include <set> 
#include <vector> 

using namespace std; 

int main() { 
    vector<int> S, P, R; 
    set<vector<int> > SS; 
    S.push_back(9); 
    S.push_back(9); 
    S.push_back(9); 
    P.push_back(656); 
    P.push_back(11); 
    P.push_back(10); 
    R.push_back(10); 
    R.push_back(11); 
    R.push_back(656); 
    SS.insert(R); 
    SS.insert(S); 
    SS.insert(P); 
    set<vector<int> >::iterator itr; 
    vector<int>::iterator i; 
    for(itr = SS.begin(); itr != SS.end(); itr++) { 
     for(i = itr -> begin(); i != itr -> end(); i++) { 
      cout<<*i<<" "; 
     } 
    } 
    return 0; 
} 

Значения вектора S и Р должны быть отображены или вектор R и S. Использование set<set<int> > не может быть использована, как она будет разрушать значения вектора S.Как удалить повторяющиеся векторы из набора векторов в C++?

+0

C не C++ не является C! Не добавляйте несвязанные теги. – Olaf

+3

Как насчет 'set >'? – PaulMcKenzie

+0

@PaulMcKenzie Я пробовал, но что-то неловкое в их использовании set > :: iterator itr; vector :: итератор i; for (itr = SS.begin(); itr! = SS.end(); itr ++) { для (i = itr -> begin(); i! = Itr -> end(); i ++) { cout << * i << ""; } –

ответ

0
#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <functional> 

using initial_vector = std::vector<int>; 
using vector_of_vecs = std::vector<initial_vector>; 

template<class...Args> 
vector_of_vecs uniqify(Args&&...args) 
{ 
    // build a temporary vector of vectors 
    vector_of_vecs result { args... }; 

    // sort it. std::unique requires the vector to be sorted 
    sort(result.begin(), result.end()); 

    // erase all items that are not unique. 
    result.erase(std::unique(result.begin(), 
          result.end()), 
       result.end()); 

    // return the result 
    return result; 
} 


auto main() -> int 
{ 
    using namespace std; 

    vector<int> A, B, C; 
    A = {2, 4, 5}; 
    B = {2, 2, 2}; 
    C = {2, 4, 5}; 

    // note: to avoid copies, simply move the vectors into uniquify 
    auto uv = uniqify(std::move(A), std::move(B), std::move(C)); 

    // or preserve the source vectors and force copies if you wish 
    //auto uv = uniqify(A, B, C); 

    // uv is now a vector of unique vectors. 

    // print out our vector of unique vectors 
    for(const auto& i : uv){ 
     cout << '['; 
     auto sep = " "; 
     for (const auto& j : i) { 
      cout << sep << j; 
      sep = ", "; 
     } 
     cout << " ]\n"; 
    } 

    return 0; 
} 

ожидаемый результат:

[ 2, 2, 2 ] 
[ 2, 4, 5 ] 
+0

Спасибо! для вашего решения –

+0

@anujbajpai, вы можете :) –

0

Используйте набор мультимножеств. Мультимножество похоже на вектор, но отсортировано, поэтому P и R (преобразованные в мультимножества) будут равны.

set<multiset<int> > SS; 
.... 
SS.insert(multiset(R.begin(), R.end()); 
SS.insert(multiset(S.begin(), S.end()); 
SS.insert(multiset(P.begin(), P.end()); 
Смежные вопросы