c++ - 在 std::map 中使用比较运算符,C++ std::string 作为键

  显示原文与译文双语对照的内容

我试图使用 std::string 作为 std::map 中的键,但是我无法正确地使用 find() 。 我的代码有点复杂和大,所以这是一个小程序,演示我所遇到的问题。 如果有人能告诉我为什么这不起作用,我将非常感激。

谢谢。


#include <stdio.h>


#include <string>


#include <map>



struct comparer


{


 public:


 bool operator()(const std::string x, const std::string y)


 {


 return x.compare(y)==0;


 }


};



int main(int argc, char *argv[])


{


 std::map<std::string, int, comparer> numbers;


 numbers.insert(std::pair<std::string,int>("One",1));


 numbers.insert(std::pair<std::string,int>("Two",2));


 numbers.insert(std::pair<std::string,int>("Three",3));


 numbers.insert(std::pair<std::string,int>("Four",4));


 numbers.insert(std::pair<std::string,int>("Five",5));



 std::map<std::string, int, comparer>::iterator it=numbers.find("Three");


 if(it!=numbers.end())


 printf("The number is %dn",(*it).second);


 else


 printf("Error, the number is not foundn");


}



时间: 原作者:

移除你的comparer,它就能正常工作。 问题是,你没有正确地实现它。 它应该返回 true,如果 x 被放置在 y 之前。 或者将 ==0 更改为 <0 或者 >0 ( 这并不重要) 。

...