Подтвердить что ты не робот

Как инициализировать набор строк в С++?

У меня есть несколько слов для инициализации при объявлении набора строк.

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

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

Я не хочу использовать str.insert("Name"); каждый раз.

Любая помощь будет оценена.

4b9b3361

Ответ 1

Использование С++ 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]));

Ответ 2

В С++ 11

Используйте списки инициализаций.

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

В С++ 03 (я голосую до ответа @john. Это очень близко к тому, что я бы дал.)

Используйте конструктор std::set( InputIterator first, InputIterator last, ...).

string init[] = { "John", "Kelly", "Amanda", "Kim" };
set<string> str(init, init + sizeof(init)/sizeof(init[0]) );

Ответ 3

Здесь вы можете сделать много способов, вот один

string init[] = { "John", "Kelly", "Amanda", "Kim" };
set<string> str(init, init + 4);

Ответ 4

если вы не С++ 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
}

Ответ 5

Существует несколько способов сделать это. С помощью С++ 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));

Ответ 6

Создайте массив строк (массив C) и инициализируйте набор с его значениями (указатели массива как итераторы):
std::string values[] = { "John", "Kelly", "Amanda", "Kim" };
std::set s(values,values + sizeof(values)/sizeof(std::string));

Ответ 7

самый простой способ

#define str string
....
set<str> so;
so.insert("John");
so.insert("Kelly");
so.insert("Amanda");
so.insert("Kim");