web-dev-qa-db-fra.com

Comment initialiser un ensemble de chaînes en C ++?

J'ai quelques mots à initialiser lors de la déclaration d'un ensemble de chaînes.

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

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

Je ne veux pas utiliser str.insert("Name"); à chaque fois.

Toute aide serait appréciée.

32
Crocode

En utilisant C++ 11:

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

Autrement:

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

En C++ 11

Utilisez listes d'initialisation .

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

En C++ 03 (Je vote la réponse de @ john. C'est très proche de ce que j'aurais donné.)

Utilisez le constructeur std::set( InputIterator first, InputIterator last, ...).

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

Il y a beaucoup de façons de le faire, en voici une

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

si vous n'êtes pas c ++ 0x:

Vous devriez regarder boost :: assign

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

Jetez également un œil à:

tilisation de STL/Boost pour initialiser un ensemble codé en dur <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
}
6
CyberGuy

Il y a plusieurs façons de procéder. En utilisant C++ 11, vous pouvez essayer soit ...

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

... qui utilise une liste d'initialisation, ou std::begin et std::end ...

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

Créez un tableau de chaînes (tableau C) et initialisez l'ensemble avec ses valeurs (pointeurs de tableau comme itérateurs):
std::string values[] = { "John", "Kelly", "Amanda", "Kim" };
std::set s(values,values + sizeof(values)/sizeof(std::string));

2
Moshe Gottlieb