Проблема создания вектора пар - PullRequest
1 голос
/ 11 августа 2011

Я пытаюсь создать структуру данных под названием Несвязанный набор.Если посмотреть на теорию, то, о чем я подумал, выглядит примерно так:

std::vector<std::pair<int,std::set<int>>> DisjointSet;
for(auto i=0;i<10;++i) DisjointSet.push_back( std::make_pair(i,std::set<int>().insert(i)));

, но этот код дает то, что находится за пределами моего понимания, поэтому это хороший дизайн для создания Disjoint Set.И как мне избавиться от этих ошибок?

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

set::insert не возвращает сам набор. Вам нужно заранее создать набор, insert, а затем использовать его в make_pair. Это делает трюк почти без накладных расходов на копию, используя move:

std::vector< std::pair<int,std::set<int> > > DisjointSet;
for(auto i=0;i<10;++i) {
  std::set<int> tmp; tmp.insert(i);
  DisjointSet.push_back( std::make_pair(i,std::move(tmp)));
}
1 голос
/ 11 августа 2011

Ну, следующий код делает то, что, я думаю, вы пытались

std::vector< std::pair< int, std::set<int> > > DisjointSet;
for (int i=0; i<10; ++i)
{
  std::set<int> tmp;
  tmp.insert(i);
  DisjointSet.push_back( std::make_pair(i,tmp) );
}
0 голосов
/ 11 августа 2011

У вас есть вызов insert, который не имеет смысла (так как он не возвращает набор).Так что

std::vector<std::pair<int,std::set<int>>> DisjointSet;
for(auto i=0;i<10;++i)
    DisjointSet.push_back( std::make_pair(i,std::set<int>().insert(i)));

Должно быть что-то вроде

std::vector<std::pair<int,std::set<int>>> DisjointSet;
std::set<int> temp;

for(auto i=0;i<10;++i)
{
    temp.insert(i)
    DisjointSet.push_back( std::make_pair(i,temp) );
    temp.clear();
}

Немного более многословно, но это правильно.

0 голосов
/ 11 августа 2011
std::set<int>().insert(i)

не возвращает std :: set.

Попробуйте сделать это в несколько строк:

for(int i=0;i<10;++i) {
    DisjointSet.push_back( std::make_pair(i,std::set<int>()) );
    DisjointSet.back().insert(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...