1. ホーム
  2. c++

[解決済み] insert" の呼び出しに対応するメンバ関数がない std::unordered_map

2022-02-09 23:37:41

質問

をハッシュ化しようとしています。 stringpointer to a void function which takes in a string . キーと値のペアをマップに挿入しようとすると、次のエラーが発生します。

quote;insert"の呼び出しに対応するメンバ関数がありません。

このエラーをどう解釈したらいいのかわかりません。

insertの型を間違えているか、関数参照を間違えているか、関数ポインタのtypedefを間違えているかのどれかだと思います。

#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));