正如我在主题中写的那样 - 我尝试将sf :: String放入map first参数中,但它不起作用。这是代码:
void Flashcards::add(sf::String sf_string) {
std::string text = sf_string.toAnsiString();
std::pair<std::string,std::string> pairr = std::make_pair(text,"<Polish translation>");
std::cout << "Inserting: " << pairr.first << std::endl;
all_words.insert(pairr); //std::map<std::string, std::string> variable
void Flashcards::show() {
std::cout << "Flashcards:\n";
for (std::map<std::string, std::string>::iterator it = all_words.begin(); it != all_words.end(); it++)
{
std::cout << "English word: " << it->first
<< " " << "Polish word: " << it->second << std::endl;
}
控制台中的结果是:
Inserting: //a word//
Flashcards:
Polish word: <Polish translation>
而非需要:
Inserting: hello
Flashcards:
English word: //a word// Polish word: <Polish translation>
以下是我已尝试过的变体:
1)我切换了参数,所以它看起来像这样:std::make_pair("<Polish translation>",text);
它的工作原理 - 硬编码键和值都显示在控制台中(但我不想要硬编码,很明显)
2)注意这一行:std::cout << "Inserting: " << pairr.first << std::endl;
表明键值正确转换为std :: string - 调用它将显示我们刚刚在键盘上输入的值。
3)我试图将sf :: String值直接发送到std :: make_pair()方法,它与将std :: string放在那里完全相同。
有人可以说如何使这项工作?
答案 0 :(得分:0)
作为add
方法的参数提供的字符串显然以\r
(回车)字符结束,可能是因为您使用Unix / Linux从Windows文本文件中读取它执行环境。如果您在一个文件中捕获程序的输出并使用hexdumper(例如hd
)查看它,您应该立即看到正在发生的事情。
它肯定与您使用C ++标准库无关。但是,您无需进行所有工作即可将条目插入std::map
。就这样做:
all_words[key] = value;
只要key
具有正确的类型(或者存在自动转换),就可以在一行中轻松理解您想要的内容,并且可能也更有效。