放入std :: map键的sf :: String不起作用 - vaule没有保存到map中

时间:2016-09-10 23:38:56

标签: c++ string dictionary sfml

正如我在主题中写的那样 - 我尝试将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放在那里完全相同。

有人可以说如何使这项工作?

1 个答案:

答案 0 :(得分:0)

作为add方法的参数提供的字符串显然以\r(回车)字符结束,可能是因为您使用Unix / Linux从Windows文本文件中读取它执行环境。如果您在一个文件中捕获程序的输出并使用hexdumper(例如hd)查看它,您应该立即看到正在发生的事情。

它肯定与您使用C ++标准库无关。但是,您无需进行所有工作即可将条目插入std::map。就这样做:

all_words[key] = value;

只要key具有正确的类型(或者存在自动转换),就可以在一行中轻松理解您想要的内容,并且可能也更有效。