是否可以像std :: list一样向std :: set插入一个新元素,例如:
//将一个名为“string”的元素插入到mylist
的子列表中std::list< std::list<string> > mylist;
mylist.push_back(std::list<string>(1, "string"));
现在,mylist在std :: list类型的子列表中有一个std :: string类型的元素。
如果std :: set是std :: list my list的子集,你怎么能这样做呢?
std::list<std::set <string>> mylist;
如果你不能那么为什么不呢?
答案 0 :(得分:6)
我认为这应该可以解决问题:
int main()
{
string s = "test";
set<string> mySet(&s, &s+1);
cout << mySet.size() << " " << *mySet.begin();
return 0;
}
有关将&s
视为数组的合法性和有效性的说明,请参阅此讨论:string s; &s+1; Legal? UB?
答案 1 :(得分:2)
std::set
没有构造函数,需要插入一个元素。您可以做的最好是使用范围构造函数:
int a[] = {1,2,3,4,5};
std::set<int> foo(a, a+5); // insert the values 1 through 5 into foo
此版本采用begin
和end
迭代器描述要插入集合的范围。您也可以选择提供排序标准。这不是你想要的,但它很接近。因此,如果您将元素存储在容器v
中,则可以将新的集合插入到列表中,如下所示:
list<set<string> > myList;
myList.push_back(set<string>(v.begin(), v.end()));
答案 2 :(得分:0)
或者,在C ++ 0x中:
std::list<std::set<int>> foo;
foo.push_back({1,2,3});