std::string
これらの文字列の一部に単一の文字しか含まれていない、キーとしての順序付けられていないマップから値を取得しようとしています。すべての入力は、std::stringstream
各値を取得して char にキャストし、それを を使用して文字列に変換する から来て
std::string result {1, character};
います。
ただし、そうすると、文字列の前に \x01 が追加されます (値 1 に対応します)。これにより、文字列がマップ内で見つからなくなります。私のデバッガーは、文字列のサイズが 2 で、値が "\x01H" であることも確認します。
なぜこれが起こっているのですか、どうすれば修正できますか?
#include <iostream>
#include <sstream>
#include <unordered_map>
int main()
{
const std::unordered_map<std::string, int> map = { {"H", 1}, {"BX", 2} };
std::stringstream temp {"Hello world!"};
char character = static_cast<char>(temp.get()); // character is 'H'
std::string result {1, character}; // string contains "\x01H"
std::cout << result << " has length " << result.size() << std::endl; // H has length 2
std::cout << map.at(result) << std::endl; // unordered_map::at: key not found
}