我似乎在不同平台上将 find() 与 STL 映射一起使用时遇到问题。这是我要完成的代码:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
void constructDictionary(map<string,bool> &dict);
bool isInDictionary(string word, map<string,bool> &dict);
int main(void)
{
map<string, bool> dictionary;
constructDictionary(dictionary);
map<string, bool>::iterator it = dictionary.begin();
while(it != dictionary.end()){
cout << it->first <<endl;
it++;
}
string word;
while(true){
cout << "Enter a word to look up: " << endl;
cin >> word;
if(isInDictionary(word, dictionary))
cout << word << " exists in the dictionary." << endl;
else
cout << word << " cannot be found in the dictionary." << endl;
}
return 0;
}
void constructDictionary(map<string,bool> &dict)
{
ifstream wordListFile;
wordListFile.open("dictionaryList.txt");
string line;
while(!wordListFile.eof()){
getline(wordListFile, line);
dict.insert(pair<string,bool>(line, true));
}
wordListFile.close();
}
bool isInDictionary(string word, map<string,bool> &dict)
{
if(dict.find(word) != dict.end())
return true;
else
return false;
}
isInDictionary()
如果在 Windows 中使用 Visual Studio 编译,则可以正常工作,但是,在 ubuntu 和 g++ 上,这仅适用于进入地图的最后一个条目。我查询的任何其他单词都返回 false。我不明白这种行为的差异。在这两种情况下,main 开头的 while 语句都会正确打印出地图中的所有内容,以证明所有内容都在那里。
有任何想法吗?谢谢你。