无法在映射中插入键和值

问题描述 投票:0回答:1

我一直在尝试按以下方式插入一些键和值,但我收到一个错误,

error: no matching constructor for initialization of 'Edge'
。我正在使用 C++17:

这是我的程序:

#include <iostream>
#include <string>
#include <map>

struct Edge
{
    int v1{};
    int v2{};

    Edge (int v1, int v2)
    :v1{v1}, v2{v2}
    {
    }

};

int main()
{
    std::map<std::string, Edge> mymap;

    mymap["edge1"] = Edge(0,0);
    mymap["edge2"] = Edge(1,1);

    return 0;
}

我很确定我的构造函数是正确的,但非常感谢任何帮助。

c++ constructor stdmap
1个回答
0
投票

如评论所述,您的代码中缺少

emplace()
调用:

#include <iostream>
#include <string>
#include <map>

struct Edge
{
    int v1{};
    int v2{};

    Edge(int v1, int v2) : v1{v1}, v2{v2} {}
};

int main()
{
    std::map<std::string, Edge> mymap;

    mymap.emplace("edge1", Edge(0, 0));
    mymap.emplace("edge2", Edge(1, 1));
    mymap.emplace("edge2", Edge(2, 2));

    for (const auto &pair : mymap)
    {
        std::cout << pair.first << " " << pair.second.v1 << " " << pair.second.v2 << std::endl;
    }
    return 0;
}


© www.soinside.com 2019 - 2024. All rights reserved.