'No matching member function for call to "insert" std::unordered_map
I am trying to hash a string to a pointer to a void function which takes in a string. I get the following error when trying to insert my key value pair into the map:
"No matching member function for call to "insert"
I am not sure how to interpret this error.
I think I'm either passing in the wrong type for insert, the function reference incorrectly, or typedef'ing a function pointer wrong.
#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);
}
Any advice would be appreciated.
Solution 1:[1]
If you want to place a new entry in the map, without actually making a new entry yourself (aka std::pair), then use one of these two forms:
switch_map.emplace("example.org", &some_function);
// OR:
switch_map["example.org"] = &some_function;
The method insert is only for adding PAIRS to the map.
If you need to use insert, then you must make a pair, as @Barry illustrated in his answer.
Solution 2:[2]
The following code is working fine.
#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));
}
You have to use std::make_pair to insert the value.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | sybog64 |
| Solution 2 | Sigcont |
