这个程序不能在Visual C ++中编译,但是由于某种原因,当使用g ++ -std = c ++ 11和在线编译器运行它时,它几乎没有任何问题(当然,当我评论#include时) stdafx.h中“)。
#include "stdafx.h"
#include <istream>
#include <fstream>
#include <unordered_map>
#include <map>
#include <iostream>
#include <vector>
using namespace std;
class Hashmap
{
std::multimap<char, string> htmap;
public:
void put(char key, const string value)
{
pair<char, string> m(key, value);
this->htmap.insert(pair<char, string>(key, value));
}
int isIn(char c, vector<char> v)
{
for (auto s : v)
if (c == s)
return 0;
return 1;
}
const void get(char key, string word)
{
int j = word.length();
vector<char> v;
vector<char> v2;
multimap<char, string>::const_iterator Values = this->htmap.find(key);
int Number = this->htmap.count(key);
for (int q = 0; q < Number; q++)
{
int j = word.length();
int ok = 1;
string a = Values->second;
for (int k = 0; k< word.length(); k++)
v2.push_back(word[k]);
for (int i = 0; i< a.length(); ++i)
{
if (isIn(a[i], v2) == 1)
ok = 0;
}
v.clear();
v2.clear();
if (ok == 1)
{
cout << "Word Found: "<< Values->second << endl; // Error Here
}
++Values;
}
}
void find(const string word)
{
string s;
int j = word.length();
for (int k = 0; k<j; k++)
{
char c = word[k];
this->get(c, word);
}
}
};
void read(Hashmap t)
{
string key, value;
ifstream f("in.txt");
while (f >> key) // Error Here
{
for (auto i : key)
t.put(i, key);
}
string word;
cout << "Word: ";
std::cin >> word; // Error Here
t.find(word);
f.close();
}
int main()
{
Hashmap t;
string word;
read(t);
return 0;
}
答案 0 :(得分:2)
但是出于某种原因,当使用g ++ -std = c ++ 11和在线编译器运行它时几乎没有任何问题......
我怀疑你已经失踪了
#include <string>
在您的代码中广泛使用std::string
。
始终包含与您在代码中使用的类/函数相对应的标准c ++标头。
某些编译器只会在std::string
等标头文件中使用iostream
的前向声明,其他编译器实际上会包含string
标题。
另请注意:
using namespace std;
在大多数情况下, isn't such a good idea。更好地明确使用std::
范围来表达您的意图。