c++ - std::map 未按预期运行

标签 c++ dictionary

我正在尝试使用 std::map 模板,但我无法让它工作。通过对互联网的研究,我找到了这个解决方案并将文件重定向到输入流,代码如下:

typedef map<char*, int> wc;
int main() {
    int c;
    char cc[75], nombre[75];
    wc m;
    scanf("%d", &c);
    while (c--) {
        scanf("%s %[ a-zA-Z]", cc, nombre);
        ++m[cc]; // This should work
        printmap(m);
    }
}

打印 map 是一个只打印 map 对象的函数。这是我的文件 input.txt

3
Spain Donna Elvira
England Jane Doe
Spain Donna Anna

当我执行程序时,输出是:

Spain -> 1
England -> 2
Spain -> 1

我期望的是:

Spain -> 2
England -> 1

Country的出现次数映射到它出现的次数

最佳答案

作为我上面评论的解决方案,您提供的代码的 C++ 版本:

typedef map<std::string, int> wc;
int main() {
    int c;
    string cc, nombre;
    wc m;
    std::cin >> c;
    while (c--) {
        std::cin >> cc;
        std::getline(std::cin, nombre);
        m[cc] += 1; // This should work
    }
    printmap(m);
}

http://ideone.com/2JP82

首先:std::map 根据键对其数据进行排序,在您的代码中,char* 指向 char cc[75]。因此,当您替换 cc 中的文本时, map 的键会发生变化,这会破坏一切。 map 的键绝不能改变。由于我们使用的是 C++,因此您根本不应该使用 char[];使用 std::string 代替,它(因为它是一个“值类型”)将使一切都神奇地工作。我不知道它之前是如何工作的,因为您没有显示 printmap 函数。

其次:每次阅读一行时都调用 printmap,并且由于 map 无法打印“最后添加的内容”,这个想法根本没有意义。 printmap 调用应该打印整个 map ,并且在循环之外。

第三:不要使用scanf,它不安全。使用流:std::cin >> cc 用于读取单个单词,或 std::getline(std::cin, nombre) 用于读取剩余内容线。这样,如果有人输入该行,代码就不会崩溃(longest country namelongest last name 的来源)

Krungthepmahanakornamornratanakosinmahintarayuttha-yamahadilokphopnopparatrajathaniburiromudomrajaniw-esmahasatharnamornphimarnavatarnsathitsakkattiyavi-sanukamprasit Wolfeschlegelsteinhausenbergerdorffvortschaferswesenchafewarenwholgepflegeunzenvonangereifenduchihrraubgiriigfeindtausendjahresvorandieerscheinenbanderechiffgebrauchlichtalsseinursprungvonkrrthinzwischensternartigraumaufdersuchebtbewohnbarplanetenkreisedrehensichundstandigmenshlichkeittkonntevortpflanzeslamdlichfreudeundruhemitnichteinfurchrintlligentgeschopfsvonhinzwischenster

关于c++ - std::map 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937605/

相关文章:

c++ - 在 C++ 上使用谷歌 Protocol Buffer 进行广播

python - 如何查找具有单个键的多个值的字典

python - 我如何拆分第二个 ", "

python - 为什么 PyScripter 控制台中的输出不同?

python - 如何在不多次调用函数的情况下访问函数内、函数外生成的字典。 PYTHON

c++ - ofstream 会自动关闭其文件吗?

c++ - 如何在 unordered_map 的键中使用 std::tr1::function 对象?

具有宽松类型要求的 C++17 lambda 捕获

C++ Builder 允许将字符串与 Int 进行比较 - 为什么?

python - 当我需要一本自指字典时,我该怎么办?