2014-09-28 50 views
0

我的問題是如何插入一些元素插入語法將元素插入多重映射<串,向量<對<string, int> >>

multimap<string, vector<pair<string, int>>> someMap; //std skipped to simplify 

我嘗試不同語法形式的多重映射,我認爲最接近的一個可以是這一個

someMap.insert(pair<string,vector<pair<string, int>>>(someString1, vector<pair<string, int>> { pair<string, int> (someString2, someInt) })); 

不幸的是它不工作。有小費嗎??

+1

用['的std :: make_pair'](HTTP://en.cppreference .com/w/cpp/utility/pair/make_pair)以避免鍵入和拼寫錯誤的冗餘類型信息。 – Csq 2014-09-28 12:43:59

+0

@Csq我添加了評論,我跳過所有std ::簡化代碼一點。無論如何感謝您的提示 – user3119781 2014-09-28 12:59:03

+0

不工作......怎麼樣?錯誤?警告?崩潰?不要讓我們陷入懸念。 – 2014-09-28 13:06:41

回答

2

類型第一對是錯

pair<string,vector<string, int>> 
        ^^^^^^^^^^^ 

反正我建議:

multimap<string, vector<pair<string, int>>> someMap; 
vector<pair<string,int>> obj; 
someMap.insert(make_pair("hello", obj)); 

,或者如果你堅持與語法(詳細模式):

multimap<string, vector<pair<string, int>>> someMap; 
    string someString2 = "hello"; 
    string someString1 = "world"; 
    int someInt = 42; 
    someMap.insert(pair<string,vector<pair<string, int>>>(someString1, vector<pair<string, int>> { pair<string, int> (someString2, someInt) })); 

這需要C++ 11。

+0

對不起,錯誤,顯然它應該是對 >> – user3119781 2014-09-28 12:56:33

+0

謝謝,它現在正在工作。我必須檢查我在哪裏犯了一個錯字,因爲我在開始時嘗試了非常類似的代碼。謝謝你的時間。 – user3119781 2014-09-28 13:27:24

+0

@ user3119781很高興我幫了忙!如果它解決了您的問題 – 2014-09-28 13:28:02

1

嘗試使用以下

#include <iostream> 
#include <map> 
#include <vector> 
#include <string> 
#include <utility> 

int main() 
{ 
    typedef std::pair<std::string, int> value_type; 
    std::multimap<std::string, std::vector<value_type>> m; 

    m.insert({ "A", std::vector<value_type>(1, { "A", 'A' }) }); 

    return 0; 
} 

或者另一示例

#include <iostream> 
#include <map> 
#include <vector> 
#include <string> 
#include <utility> 

int main() 
{ 
    typedef std::pair<std::string, int> value_type; 
    std::multimap<std::string, std::vector<value_type>> m; 

    auto it = m.insert({ "A", std::vector<value_type>(1, { "A", 'A' }) }); 

    for (char c = 'B'; c <= 'Z'; ++c) 
    { 
     const char s[] = { c, '\0' }; 

     it->second.push_back({ s, c }); 
    } 

    size_t i = 0; 
    for (const auto &p : it->second) 
    { 
     std::cout << "{" << p.first << ", " << p.second << "} "; 
     if (++i % 7 == 0) std::cout << std::endl; 
    } 
    std::cout << std::endl; 

    return 0; 
} 

輸出是

{A, 65} {B, 66} {C, 67} {D, 68} {E, 69} {F, 70} {G, 71} 
{H, 72} {I, 73} {J, 74} {K, 75} {L, 76} {M, 77} {N, 78} 
{O, 79} {P, 80} {Q, 81} {R, 82} {S, 83} {T, 84} {U, 85} 
{V, 86} {W, 87} {X, 88} {Y, 89} {Z, 90} 
+0

std :: vector (1,{「A」,'A'}它應該沒有這個1,因爲我們正在存儲字符串和int對,我已經嘗試過但它不起作用(1表示第一個解決方案) – user3119781 2014-09-28 13:10:10

+0

@ user3119781所有的工作,試試它在www.ideone.com std :: vector的構造函數需要兩個參數 – 2014-09-28 13:12:06

+0

嗯,我試圖通過只複製你的代碼到我的,它的工作:),我的道歉。我需要在我的代碼中嘗試一個錯誤,因爲我試圖將它調整爲你的,但是我在構造函數中跳過了那個。你可以嘗試解釋額外的參數或發送Soome鏈接來閱讀它,我認爲,像往常一樣,我們可以使用普通的初始化列表或類似的東西。 – user3119781 2014-09-28 13:22:56

相關問題