2012-09-08 30 views
25

Tengo que inicializar algunas palabras al declarar un conjunto de cadenas.¿Cómo inicializar una cadena establecida en C++?

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

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

no quiero utilizar str.insert("Name"); cada vez.

Cualquier ayuda sería apreciada.

+2

Usted puede tomar ventaja de listas de inicializador si está usando C++ 11. Ver # 5 en esta [lista de constructores] (http://en.cppreference.com/w/cpp/container/set/set) y la parte relevante de Stroustrup [C++ 11 FAQ] (http: // stroustrup. com/C++ 11FAQ.html # init-list). – chris

Respuesta

54

Usando C++ 11:

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

lo contrario:

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

Hay un montón de maneras que usted puede hacer esto, aquí está uno

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

cómo elegir el segundo elemento del conjunto aquí? como una matriz [1] –

11

En C++ 11

Utilice initializer lists.

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

En C++ 03(estoy votando por john @ de respuesta. Está muy cerca de lo que habría dado.)

Uso del std::set(InputIterator first, InputIterator last, ...) constructor.

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

Existen varias formas de hacerlo. Usando C++ 11, se puede tratar ya sea ...

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

... que utiliza una lista de inicialización, o std::begin y std::end ...

std::string vals[] = { "John", "Kelly", "Amanda", "Kim" }; 
std::set<std::string> set(std::begin(vals), std::end(vals)); 
2

Crear una matriz de cadenas (C array) e inicializar el conjunto de valores con ella (como punteros de matriz iteradores):
std::string values[] = { "John", "Kelly", "Amanda", "Kim" };
std::set s(values,values + sizeof(values)/sizeof(std::string));

-3

la forma más fácil

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

La pregunta dice explícitamente que no quiere usar una inserción por artículo. Y la macro de definición es completamente irrelevante para la pregunta. – user2460978

Cuestiones relacionadas