Кажется, у меня проблемы с использованием 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()
работает нормально, если скомпилировано с использованием Visual Studio в Windows, однако, на Ubuntu и G ++, это работает только для последней записи в карту.Любое другое слово, которое я запрашиваю, возвращает false.Я не понимаю несоответствия в этом поведении.В обоих случаях оператор while в начале main правильно распечатывает все на карте, чтобы доказать, что все есть.
Есть идеи?Спасибо.