2011-10-25 22 views
32

Tôi có một vector của pair như ví dụ:Thêm vào một vector của các cặp

vector<pair<string,double>> revenue; 

tôi muốn thêm vào một chuỗi và cú đúp của một bản đồ như thế này:

revenue[i].first = "string"; 
revenue[i].second = map[i].second; 

Nhưng kể từ khi doanh thu không được khởi tạo, nó xuất hiện với lỗi ngoài giới hạn. Vì vậy, tôi đã thử sử dụng vector::push_back như thế này:

revenue.push_back("string",map[i].second); 

Nhưng điều đó nói không thể có hai đối số. Vậy làm cách nào tôi có thể thêm vào số vector của pair này?

+0

Vì vậy, bạn không có cặp vectơ mà là một vectơ cặp hoặc véc tơ của các cặp. Khi bạn hiểu điều này, bạn đã giải quyết được vấn đề của mình. –

Trả lời

76

Sử dụng std::make_pair:

revenue.push_back(std::make_pair("string",map[i].second)); 
+1

Còn emplace_back thì sao? –

+1

@ Mr.WorshipMe, bạn có thể sử dụng nó trong C++ 11. Xem câu trả lời bên dưới để biết ví dụ. Tôi không chắc chắn những gì bạn đang yêu cầu mặc dù. – avakar

+1

Tôi đã chỉ đến một giải pháp thanh lịch hơn và có thể nhanh hơn ... Tôi không thấy câu trả lời dưới mức ... Bạn có thể muốn cập nhật câu trả lời của mình ... –

9
revenue.pushback("string",map[i].second); 

Nhưng mà nói không thể lấy hai tham số. Vậy làm thế nào tôi có thể thêm vào cặp vectơ này?

Bạn đang đi đúng hướng, nhưng hãy nghĩ về điều đó; vector của bạn giữ gì? Nó chắc chắn không giữ một chuỗi và một int trong một vị trí, nó giữ một Pair. Vì vậy, ...

revenue.push_back(std::make_pair("string", map[i].second));  
20

IMHO, một giải pháp rất tốt đẹp là sử dụng C++ 11 emplace_back chức năng:

revenue.emplace_back("string", map[i].second); 

Nó chỉ tạo ra một nguyên tố mới tại chỗ.

4

Hoặc bạn có thể sử dụng danh sách khởi tạo:

revenue.push_back({"string", map[i].second}); 
-2

Hãy thử sử dụng một cặp tạm thời:

pair<string,double> temp; 
vector<pair<string,double>> revenue; 

// Inside the loop 
temp.first = "string"; 
temp.second = map[i].second; 
revenue[i].push_back(temp); 
+0

doanh thu [i] là sai! – bicepjai

1
revenue.push_back(pair<string,double> ("String",map[i].second)); 

này sẽ làm việc.