我正在尝试创建一个名为Disjoint Set的数据结构。看看理论我的想法是这样的:
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的好设计。另外我如何摆脱这些错误?
答案 0 :(得分:3)
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 :(得分:1)
以下代码执行我认为您正在尝试的内容
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) );
}
答案 2 :(得分:0)
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);
}
答案 3 :(得分:0)
你有一个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();
}
稍微冗长一点,但它是正确的。