如何插入对多图的引用?

How to insert a reference to a multimap?

我有一个 class Foo,其中包含一个带有 unsigned longreferenceBar class 的多图。

我收到错误 "no matching function to call multimap, etc"。

我插入多图有什么问题?

[头文件]

class Foo
{
public:

    Foo();

    ~Foo();

    void set(const unsigned long var1, const Bar& var2);

private:

    struct map_sort
    {
        bool operator()(const unsigned long& e1, const unsigned long& e2) const
        {
            return (e2 < e1);
        }
    };

    std::multimap<unsigned long,Bar&, map_sort> m_map;
};

[源文件]

void Foo::set(const unsigned long var1, const Bar& var2)
{
    m_map.insert(var1,rtime); //<-- ERROR!!!!!!!!
}

您的 multimap 成员被声明为 unsigned longBar&

std::multimap<unsigned long,Bar&, map_sort> m_map;

同时,在源文件中

void Foo::set(const unsigned long var1, const Bar& var2)
{
    m_map.insert(var1,rtime); //var1 is const here! (rtime is not declared but I assume you meant var2 - which is const, too)
}

您正在尝试插入与上面声明的不同的 const unsigned longconst Bar&(它们是常量)。请注意,const unsigned long 并不是真正的问题,因为它是按值复制的,因此,事实上,multimap 保留了自己的变量版本,而 "main" 则无法修改。

此外,请查看 multimap 的 insert 方法 http://www.cplusplus.com/reference/map/multimap/insert/ 的文档。您应该使用 std::pair 来插入键值对:)

解决方案 1: 更改您的方法以采用非常量参数:

void set(unsigned long var1, Bar& var2);

解决方案 2: 更改您的地图以包含常量值:

std::multimap<const unsigned long, const Bar&, map_sort> m_map

工作示例:

class Foo
{
public:

    Foo();

    ~Foo();

    void set(const unsigned long var1, const Bar& var2);

private:

    struct map_sort
    {
        bool operator()(const unsigned long& e1, const unsigned long& e2) const
        {
            return (e2 < e1);
        }
    };

    std::multimap<const unsigned long, const Bar&, map_sort> m_map;
};

void Foo::set(const unsigned long var1, const Bar& var2)
{
    m_map.insert(pair<const unsigned long, const Bar&>(var1, var2));
}