1

所以,我是 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

我使用自述文件(./configure、make、make install)中的注释安装了库

4

0 回答 0