2012-09-08 11 views
25

स्ट्रिंग सेट घोषित करते समय मेरे पास प्रारंभ करने के लिए कुछ शब्द हैं।सी ++ में स्ट्रिंग सेट को कैसे प्रारंभ करें?

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

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

मैं हर बार str.insert("Name"); का उपयोग नहीं करना चाहता।

किसी भी मदद की सराहना की जाएगी।

+2

आप का लाभ ले सकते यदि आप C++ 11 का उपयोग कर रहे हैं तो प्रारंभकर्ता सूचियां। इस [कन्स्ट्रक्टर सूची] में # 5 देखें (http://en.cppreference.com/w/cpp/container/set/set) और स्ट्रॉस्ट्रप के [सी ++ 11 एफएक्यू] के प्रासंगिक भाग (http: // stroustrup। com/सी ++ 11FAQ.html # init-सूची)। – chris

उत्तर

54

का उपयोग करना है सी ++ 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])); 
7

तरीकों से आप यह कर सकते हैं के बहुत सारे है, यहाँ एक

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

यहां सेट के दूसरे तत्व को कैसे चुना जाए? एक सरणी की तरह [1] –

11

में सी ++ 11

initializer lists का उपयोग करें।

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

सी ++ 03में (मैं मतदान कर रहा हूँ @ जॉन का जवाब। यह बहुत करीब मैं क्या दिया होता है।)

उपयोग std::set(InputIterator first, InputIterator last, ...) निर्माता।

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

ऐसा करने के कई तरीके हैं। सी ++ 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)); 
2

तार की एक सरणी बनाएँ (सी सरणी) और यह के मूल्यों के साथ सेट को प्रारंभ (iterators के रूप में सरणी संकेत):
std::string values[] = { "John", "Kelly", "Amanda", "Kim" };
std::set s(values,values + sizeof(values)/sizeof(std::string));

5

यदि आप नहीं कर रहे हैं C++ 0x:

आप को बढ़ावा देने पर गौर करना चाहिए :: आवंटित

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

इसके अलावा पर एक नज़र डालें:

Using STL/Boost to initialize a hard-coded set<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 
} 
-3

सबसे आसान तरीका है

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

सवाल स्पष्ट रूप से कहता है कि यह प्रति आइटम एक डालने का उपयोग नहीं करना चाहता है। और परिभाषित मैक्रो सवाल के लिए पूरी तरह से अप्रासंगिक है। – user2460978

संबंधित मुद्दे