2016-10-19 12 views
2

const char *をキーとしてboost :: multimapを使用できますか?または、他のポインタにキーがありますか?マルチマップでのポインタとしてのポインタ

私はそれが大丈夫だと思いました。しかし、私がそれをしたとき、私は挿入後に私の価値観を見つけることができませんでした。しかし、私は彼らがstd :: keyにキーを変更したときにうまく動作します。私は最初は分かりませんでした。

私はそれについて考えましたが、これが私の説明だと思います。

キーとしてchar *を使用すると、キー(0xccbbee - > value(1))のように "0xccbbee"のようなメモリアドレスの値にマップされることを意味します。だから値を抽出するには "0xccbbee"で値1を得るために送る必要があります。私はそれをしません。

私は代わりにメモリの場所にあるもの(おそらく "HELLO")のキーを使って値を取得しようとし、 "HELLO"にマップされた値を取得しようとすると何も得られません。それは問題でしたか?

私の理解は正しいですか?私の理解が正しいかどうかを教えてください。私は学ぶことをしようとしています。

TIA

-R

+1

をテストケースにしてください。ガット感:文字列リテラルをキーとして使用していますが、同じアドレスを保証するものではありません。 – krzaq

答えて

3

問題のあなたの説明は正しいです。望ましい結果を得るには、Comparator

struct StrCompare 
{ 
    bool operator()(const char* lhs, const char* rhs) const 
    { 
     return strcmp(lhs, rhs) < 0; 
    } 
}; 

typedef boost::multimap<const char*, whatever, StrCompare> StrToWhateverMultimap; 
+0

@Leon!を確認してくれてありがとう! – codeworks

関連する問題