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

これを行う方法はたくさんありますが、ここに1つあります

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::beginまたはstd::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 に答える