密钥在字典C ++中不断被替换

时间:2016-01-11 06:22:22

标签: c++ dictionary

我正在尝试在C ++中创建一个类的字典类型,类似于在Python中看到的类,您可以在其中指定键和值(在这种情况下可以是任何类型,包括自定义类)

for (unsigned int x = 0; x < word.length(); x++) {
    if (!map.has_key(word[x])) {
        std::cout << "CREATING " << word[x] << std::endl;
        map[word[x]] = ics::ArraySet<char>();
        map[word[x]].insert(word[x]);
    }
    for (int y = 0; y < dist; y++) {
        std::cout << "HELLO!" << std::endl;
        if ((x + y) < word.length())
            std::cout << "ADDING " << word[x+y] << std::endl;
            map[word[x]].insert(word[(x + y)]);
        if ((x - y) >= 0)
            map[word[x]].insert(word[(x - y)]);
    }
}

发生的问题是我的密钥一直在被替换。我正在尝试找到当前字母“x”范围内的字母。我将这些附近的键附加到一个集合中,这是我在此场景中的字典值。

例如:附近(赛车,2)

应该返回一个包含这样的值的字典......

字典('r' - &gt; {r,a,c},'a' - &gt; {r,c,e},...)

然而,发生的是

if (!map.has_key(word[x]))

一直失败,我的钥匙每次都与套装一起重新创建。

1 个答案:

答案 0 :(得分:1)

你认为你的缩进意味着代码结构不存在的经典错误

    if ((x + y) < word.length())
        std::cout << "ADDING " << word[x+y] << std::endl;
        map[word[x]].insert(word[(x + y)]);

但是,map[word[x]].insert(word[(x + y)]);语句不受if

的影响

在这两个语句周围添加花括号{}