2012-09-08 32 views
25

Tôi có một vài từ được khởi tạo trong khi khai báo một tập hợp chuỗi.Cách khởi tạo một chuỗi được đặt trong C++?

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

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

Tôi không muốn sử dụng str.insert("Name"); mỗi lần.

Mọi trợ giúp sẽ được đánh giá cao.

+2

Bạn có thể tận dụng lợi thế của initializer liệt kê nếu bạn đang sử dụng C++ 11. Xem # 5 trong [list constructor] (http://en.cppreference.com/w/cpp/container/set/set) và phần liên quan của [C++ 11 FAQ của Stroustrup] (http: // stroustrup. com/C++ 11FAQ.html # init-list). – chris

Trả lời

54

Sử dụng C++ 11:

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

Nếu không:

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

Có rất nhiều cách bạn có thể làm điều này, đây là một

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

cách chọn phần tử thứ hai của bộ này tại đây? giống như một mảng [1] –

11

Trong C++ 11

Sử dụng initializer lists.

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

Trong C++ 03(Tôi bỏ phiếu lên @ john của câu trả lời. Nó rất gần những gì tôi đã đưa ra.)

Sử dụng constructor std::set(InputIterator first, InputIterator last, ...).

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

Có nhiều cách để thực hiện việc này. Sử dụng C++ 11, bạn có thể thử một trong hai ...

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

... trong đó sử dụng một danh sách initializer, hoặc std::beginstd::end ...

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

Tạo một mảng các chuỗi (C mảng) và khởi tạo các thiết lập với giá trị của nó (con trỏ mảng như lặp):
std::string values[] = { "John", "Kelly", "Amanda", "Kim" };
std::set s(values,values + sizeof(values)/sizeof(std::string));

-3

cách dễ nhất

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

Câu hỏi nói rõ ràng rằng nó không muốn sử dụng một chèn cho mỗi mục. Và macro xác định hoàn toàn không liên quan đến câu hỏi. – user2460978

Các vấn đề liên quan