Is there a quick way to create a set?
目前我正在创建这样的新集合:
1 2 3 4 5 6 | std::set<A> s; s.insert(a1); s.insert(a2); s.insert(a3); ... s.insert(a10); |
有没有办法在一行中创建
1 2 | int myints[]= {10,20,30,40,50}; std::set<int> mySet(myints, myints + 5); |
好吧,诚然有两行:)
您可以查看boost.assign,它允许您编写以下内容:
1 | const std::list<int> primes = boost::assign::list_of(2)(3)(5)(7)(11); |
在C++0x中,标准定义了初始化器列表作为对这种(笨拙)构造的改进。
现在更容易了:
1 | std::set<int> set = {10, 20, 30, 40, 50}; |
标准库只需声明集合的以下构造函数:
1 2 | template <typename Value, typename Compare, typename Allocator> set<Value, Compare, Allocator>::set(std::initializer_list<Value> list); |
我们所有的忧虑都被一扫而光了。
如果您的初始数据位于某个容器
1 | std::set<A> s(a.begin(), a.end()); |
您可能想看看Boost。分配:
http://www.boost.org/doc/libs/1_44_0/libs/assign/doc/index.html
这里有一个C++0x替代MOO果汁的答案,其中A的构造比EDCOX1(0)更昂贵。
1 2 3 4 5 6 7 | int myints[]= {10,20,30,40,50}; size_t total(sizeof(myints) / sizeof(int)); auto begin(std::make_move_iterator(myints)); auto end(std::make_move_iterator(myints + total)); std::set<int> mySet(begin, end); |