c++ - 読み込み - 何をググろうとしたか忘れた
std:: mapからconst char*キーを検索しようとしてエラーが発生しました (1)
const char*
を2つ比較することは、あなたの思う通りにはできません。 ポインタが指す文字列ではなく、ポインタ値を比較します。 文字列リテラルでは、これはときおり動作することがありますが、同じ文字でも2つの文字列リテラルが同じアドレスに格納されることはわかりません。 その作業を確実に行うためには、 strcmp
を呼び出すカスタムコンパレータを用意する必要があります。
std::map<std::string, std::string>
方がはるかに良いです。 あなたのサードパーティ製APIがconst char*
を与えることは重要ではありません。それらからstd::string
簡単に構築できます。
このコンテナには、オーナーシップと生涯セマンティクスの明確な要素があり、自動的に正しく注文されます。 一言で言えば、あなたの問題はすべて消え去ります。
const char*
を実際に格納する必要がある場合は、このような要件は非常にまれであり、コンテナの安全性の理由と理由を詳細に説明するコメントを使用してコードを捨てる準備ができていれば、 ヒント:ほとんど確かにそうではありません。
私はこのように宣言された地図を持っています:
std::map<const char*, const char*> map2D;
マップは、 const char*
を返すAPI関数の出力によって満たされます。
map2D.insert(std::pair<const char*, const char*>(TempA, TempB));
今では50のTempA
値と50のTempB
値があり、 "months"という名前のキーが1つあります。 私がこのキーを探しているとき、私は "見つからない"ようになっています。 例えば:
std::map<const char*, const char*>::iterator it;
it = map2D.find("months");
if (it != map2D.end())
{
std::cout << "Found " << it->first << " " << it->second << '\n';
}
else
{
std::cout << "Not found\n";
}
しかし、私がこのようにしているときは:
map2D.insert(std::pair<const char*, const char*>("months", "June");
私はそれぞれの月を見つけることができます。 ウェブを検索した後、私はこの問題がconst char*
使用に関連している可能性があることを理解しています。 誰もこれをさらに明確にすることはできますか?