Итак, я нуб в C ++, и я пытаюсь использовать sparse_hash_map но я не могу понять, почему вставка в карту не работает при чтении строк из файла, но работает, когда я жестко кодирую строки.
#include <fstream>
#include <string>
#include <iostream>
#include <sstream>
#include <sparsehash/sparse_hash_map>
using google::sparse_hash_map;
using std::cout;
using std::endl;
using std::tr1::hash;struct eqstr {
bool operator()(const char* s1, const char* s2) const {
return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0);
}
};
int main() {
sparse_hash_map<const char*, int, hash<const char*>, eqstr> map;
std::string str1 = "test data 1";
const char * c1 = str1.c_str();
std::string str2 = "test data 2";
const char * c2 = str2.c_str();
std::string str3 = "test data 3";
const char * c3 = str3.c_str();
map[c1] = 1;
map[c2] = 1;
map[c3] = 1;
cout << "Total: " << map.size() << endl; // 3
std::string tmpStr;
std::ifstream file;
file.open("/usr/src/test.data");
while (getline(file, tmpStr)) {
const char * c = tmpStr.c_str();
cout << c << endl; // prints row
map[c] = 1;
}
cout << "Total: " << map.size() << endl; // prints 4, but obviously it should print 9.
}
Он всегда вставляет только первую строку из файла, но работает при использовании жестко закодированных строк.
/usr/src/test.data
row 1
row 2
row 3
row 4
row 5
row 6
Мой код был скомпилирован с g ++ (Debian 4.9.2-10) 4.9.2
__cplusplus 199711L
Я установил библиотеку, используя примечания внутри файла readme (./configure, make, make install)
Задача ещё не решена.
Других решений пока нет …