我正在練習從加速C++:計數每個不同的字有多少次出現在輸入
寫一個程序來計算每個不同的字有多少次出現在其輸入。
這裏是我的代碼:
#include <iostream>
#include <string>
#include <vector>
int main()
{
// Ask for
// and read the input words
std::cout << "Please input your words: " << std::endl;
std::vector<std::string> word_input;
std::string word;
int count = 0;
while (std::cin >> word)
{
word_input.push_back(word);
++count;
}
// Compare the input words
// and output the times of every word compared only with all the words
/***** I think this loop is causing the problem ******/
for (int i = 0; i != count; ++i)
{
int time = 0;
for (int j = 0; j != count; ++j)
{
if (word_input[i] == word_input[j])
++time;
else
break;
}
std::cout << "The time of "
<< word_input[i]
<< " is: "
<< time
<< std::endl;
}
return 0;
}
如果你編譯並運行這個程序,你會看到:
Please input your words:
我輸入如下:
good good is good EOF
然後它顯示:
The time of good is: 2 The time of good is: 2 The time of is is: 0 The time of good is: 2
我預期的結果是:
The time of good is: 3 The time of is is: 1
我不想使用地圖,因爲我還沒有得知呢。
是什麼導致了這種意外的行爲,我該如何解決?
std :: map沒有作爲散列表實現,因此它仍然很慢。請參閱stdext :: hash_map或更新的std :: tr1 :: unordered_map。 – 2010-09-29 11:21:33
我不想使用地圖,因爲我沒有學到〜我剛學了3章。我曾經編輯過我的問題。也許你沒有得到我想要的。謝謝你們一樣〜 – Darson 2010-09-29 11:23:32
@Mark Ingram:或者'boost :: unordered_map'適合較老的編譯器。 – lunaryorn 2010-09-29 11:27:47