【问题标题】:No matching function for call to ‘std::map<std::pair<int, int>, int>::insert(std::pair<int, int>, int)’ vis.insert(make_pair(1,2),3);没有匹配函数调用 'std::map<std::pair<int, int>, int>::insert(std::pair<int, int>, int)' vis.insert(make_pair(1,2 ),3);
【发布时间】:2018-12-31 10:04:22
【问题描述】:

我写了一个简单的代码如下,它使用pair作为map中的键,

map<pair<int, int>, int> vis;
int main(
                )
{
        vis.insert(make_pair(1,2),3);
        return 0;
}

我在 vis.insert(make_pair(1,2),3) 线上遇到了错误,因为“no matching function for call to 'std::map, int> ::insert(std::pair, int)' vis.insert(make_pair(1,2),3);" 。有人知道我为什么会收到这个错误吗?

【问题讨论】:

  • 这不是您在地图中插入 k/v 对的方式。 std::make_pair(std::make_pair(1,2),3)) 应该是 single 参数。

标签: c++ stl


【解决方案1】:

您的地图的键是一对,值是一个整数。问题是insert() 得到一个参数,这是一对键和值。你有两个选择:

std::map<std::pair<int, int>, int> vis;
int main(
                )
{
    // option one (c++11 and later)
    vis.emplace(std::make_pair(1,2),3);

    // option two - pack key and value into a single pair.
    vis.insert(std::make_pair(std::make_pair(1,2),3));

    // option three - use braces (c++11 and later)
    vis.insert({{1,2},3});

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2014-03-03
    • 2010-12-09
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多