2014-10-17 31 views
0

我有一個字符串類型的載體,它包含以下出現的次數:計數字符串中的矢量

tpNums contains:  2 15 38 43 50   5 14 16 29 53 

我試圖把向量的內容和計算的各數的次數矢量出現在這種情況下,它們都只出現一次;以下代碼:

std::map<std::string, std::size_t> results; 
    std::for_each(begin(tpNums), end(tpNums), [&](std::string const& s) 
    { 
     ++results[s]; 

    }); 

我的問題是,如何輸出結果圖的內容?

有沒有更容易解決我的問題,或者這是唯一的方法?

編輯:

我已經試過這樣:

std::map<std::string, std::size_t> results; 
    std::for_each(begin(tpNums), end(tpNums), [&](std::string const& s) 
    { 
     ++results[s]; 
     cout << results[s]; 

    }); 

OUTPUT:1112

我不認爲我是輸出正確的事情,我已經嘗試了不同的方式,但他們要麼秀錯誤或輸出錯誤的東西

+0

顯示你的'cout'相關代碼? – billz 2014-10-17 23:17:11

+0

你在談論哪個矢量?我在代碼中的任何地方都看不到任何'std :: vector'。 – Oguk 2014-10-17 23:30:30

+0

tpNums是我從來沒有顯示過的矢量的地方 – 2014-10-17 23:37:44

回答

2

要轉儲地圖的內容,您可以使用通常的map::cbegin/map::cend圈:

for (auto it = results.cbegin(); it != results.cend(); ++it) 
    std::cout << it->first << " => " << it->second << '\n'; 

,或者如@leemes提及,只是

for (auto& pair : results) 
    std::cout << pair.first << " => " << pair.second << '\n'; 

如果你已經預先C++編譯器11,然後map::begin/map::end

for (std::map<string, size_t>::iterator it = result.begin(); it != result.end(); ++it) 
    std::cout << it->first << " => " << it->second << '\n'; 
+0

哦,好吧,這工作,但我不認爲我的地圖正在計算正確的事情,它顯示這個 '=> 2' '2 15 38 43 50 => 1' '5 14 16 29 53 => 1' 我想讓它計算每個單獨的數字,但它正在計算一系列數字,是因爲我在矢量中有多餘的空格嗎? – 2014-10-17 23:28:18

+0

「5 14 16 29」是一個字符串。不管有多少空間,它只是一個*長的字符串。如果你想用單個「數字序列」做些什麼,你首先必須將字符串分解成你認爲是一個實體的塊(或者甚至可能將它們轉換爲數字)。 – Oguk 2014-10-17 23:33:29

+0

似乎tpNums包含4個字符串:''「,」2 15 38 43 50「,」「,」1 5 14 16 29 53「'。你需要先將它們分成單獨的數字。請參閱http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c。 (爲了簡單起見,你可以首先使用'「」'作爲分隔符將'tpNum'中的所有字符串連接成一個長字符串,然後將結果字符串拆分爲一個向量,然後進行計數循環。) – AlexD 2014-10-17 23:33:43