没有匹配的成员函数来调用 "insert" std::unordered_map

No matching member function for call to "insert" std::unordered_map

我正在尝试将 string 散列为 pointer to a void function which takes in a string。尝试将我的键值对插入地图时出现以下错误:

"No matching member function for call to "插入

我不确定如何解释这个错误。

我想我要么为插入传递了错误的类型,要么函数引用不正确,要么函数指针的类型定义错误。

#include <string>
#include <unordered_map>
using namespace std;

void some_function(string arg)
{
  //some code
}

int main(int argc, const char * argv[]) {


    typedef void (*SwitchFunction)(string);
    unordered_map<string, SwitchFunction> switch_map;

    //trouble with this line
    switch_map.insert("example arg", &some_function); 
}   

如有任何建议,我们将不胜感激。

如果您查看 std::unordered_map::insert 的重载,您会看到这些:

std::pair<iterator,bool> insert( const value_type& value );
template< class P >
std::pair<iterator,bool> insert( P&& value );
std::pair<iterator,bool> insert( value_type&& value );
iterator insert( const_iterator hint, const value_type& value );
template< class P >
iterator insert( const_iterator hint, P&& value );
iterator insert( const_iterator hint, value_type&& value );
template< class InputIt >
void insert( InputIt first, InputIt last );
void insert( std::initializer_list<value_type> ilist );

没有 insert(key_type, mapped_type),这正是您想要做的。你的意思是:

switch_map.insert(std::make_pair("example arg", &some_function)); 

如果您想在地图中放置一个新条目,而不是自己实际创建一个新条目(又名 std::pair),请使用以下两种形式之一:

switch_map.emplace("example.org", &some_function);
// OR:
switch_map["example.org"] = &some_function;

方法insert仅用于将PAIRS添加到地图。
如果需要使用insert,那么必须做一对,如@Barry illustrated in .

以下代码运行良好。

#include<iostream>
#include <string>
#include <unordered_map>
using namespace std;

void some_function(string arg)
{
    return;
  //some code
}

int main(int argc, const char * argv[]) {
typedef void (*SwitchFunction)(string);


    unordered_map<string, SwitchFunction> switch_map;

    //trouble with this line
    switch_map.insert(std::make_pair("example arg", &some_function));
}  

您必须使用 std::make_pair 来插入值。