小编sah*_*aha的帖子

为什么operator <of c ++ map不能与<=一起使用

我有以下程序用于自定义键的地图:

class MyClass
{
public:

    MyClass(int i): val(i) {}

    bool operator< (const MyClass& that) const { return val <= that.val; }

private:
    int val;
};

int main()
{
    MyClass c1(1);
    MyClass c2(2);
    MyClass c3(3);

    map<MyClass, int> table;

    table[c1] = 12;
    table[c2] = 22;
    table[c3] = 33;

    cout << "Mapped values are: " << table.lower_bound(c1)->second << " " << table[c2] << " " << table[c3] << endl;

}
Run Code Online (Sandbox Code Playgroud)

输出如下:

Mapped values are: 22 0 0
Run Code Online (Sandbox Code Playgroud)

但是,如果我在运算符<而不是<=中使用<或>进行比较,那么一切正常.输出如下:

Mapped values are: 12 22 …
Run Code Online (Sandbox Code Playgroud)

c++ stl

1
推荐指数
1
解决办法
74
查看次数

unordered_map 不迭代所有键

我有以下代码迭代 unordered_map 中的所有键,同时迭代我将映射传递给其他函数。由于某种原因,迭代器无法迭代所有键。我无法弄清楚为什么以及如何解决这个问题。如果我将地图作为值而不是引用传递,那么它会按预期工作,但我想通过引用传递来保存副本。

代码:

void DFS(char curr, unordered_map<char, unordered_set<char>>& G) {
    cout << "Traversing: " << curr << endl;
    for(const char& ch: G[curr]) {
        DFS(ch, G);
    }
}

int main() {
    unordered_map<char, unordered_set<char>> G;

    G['c'].emplace('b');
    G['b'].emplace('a');

    for(auto it : G) {
        cout << "Starting with: " << it.first << endl;
        DFS(it.first, G);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

Starting with: b
Traversing: b
Traversing: a
Run Code Online (Sandbox Code Playgroud)

请注意,它不是遍历 key c

更新: 更改 DFS 函数以使地图 const 如下所示也无济于事:

void DFS(const char curr, const unordered_map<char, unordered_set<char>>& G) …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map

0
推荐指数
1
解决办法
159
查看次数

标签 统计

c++ ×2

stl ×1

unordered-map ×1