使用构造函数将元素插入std :: set

时间:2010-03-08 21:12:29

标签: c++ stl

是否可以像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;

如果你不能那么为什么不呢?

3 个答案:

答案 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

此版本采用beginend迭代器描述要插入集合的范围。您也可以选择提供排序标准。这不是你想要的,但它很接近。因此,如果您将元素存储在容器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});