42

在声明字符串集时,我有几句话要初始化。

...
using namespace std;
set<string> str;

/*str has to contain some names like "John", "Kelly", "Amanda", "Kim".*/

我不想str.insert("Name");每次都用。

任何帮助,将不胜感激。

4

6 回答 6

78

使用 C++11:

std::set<std::string> str = {"John", "Kelly", "Amanda", "Kim"};

否则:

std::string tmp[] = {"John", "Kelly", "Amanda", "Kim"};
std::set<std::string> str(tmp, tmp + sizeof(tmp) / sizeof(tmp[0]));
于 2012-09-08T19:30:38.643 回答
19

在 C++11 中

使用初始化列表

set<string> str { "John", "Kelly", "Amanda", "Kim" };

在 C++03 中 (我投票赞成@john 的答案。这非常接近我所给出的。)

使用std::set( InputIterator first, InputIterator last, ...)构造函数。

string init[] = { "John", "Kelly", "Amanda", "Kim" };
set<string> str(init, init + sizeof(init)/sizeof(init[0]) );
于 2012-09-08T19:32:17.507 回答
8

有很多方法可以做到这一点,这里有一个

string init[] = { "John", "Kelly", "Amanda", "Kim" };
set<string> str(init, init + 4);
于 2012-09-08T19:30:20.553 回答
6

如果你不是 c++0x:

你应该看看 boost::assign

http://www.boost.org/doc/libs/1_39_0/libs/assign/doc/index.html#list_of

也看看:

使用 STL/Boost 初始化硬编码集<vector<int> >

#include <boost/assign/list_of.hpp> 
#include <vector>
#include <set>

using namespace std;
using namespace boost::assign;

int main()
{
    set<int>  A = list_of(1)(2)(3)(4);

    return 0; // not checked if compile
}
于 2012-09-08T19:45:43.893 回答
4

有多种方法可以做到这一点。使用 C++11,您可以尝试...

std::set<std::string> set {
  "John", "Kelly", "Amanda", "Kim"
};

...它使用初始化列表,或者std::beginstd::end...

std::string vals[] = { "John", "Kelly", "Amanda", "Kim" };
std::set<std::string> set(std::begin(vals), std::end(vals));
于 2012-09-08T19:35:23.007 回答
2

创建一个字符串数组(C 数组)并用它的值初始化集合(数组指针作为迭代器):
std::string values[] = { "John", "Kelly", "Amanda", "Kim" };
std::set s(values,values + sizeof(values)/sizeof(std::string));

于 2012-09-08T19:39:16.333 回答