C++ 运算符==dons';t存在于std::vector中? 类映射{ 私人: std::向量键; std::载体存储; int i; 公众: Map(); 映射*集(标准::字符串,标准::字符串); std::string get(std::string); }; Map::Map(){} 映射*映射::集(标准::字符串k,标准::字符串v){ 键。向后推(k); 储存。推回(v); i++; 返回(本); } std::string映射::get(std::string k){ for(int k=0;kMap::key。std::vector::operator[] _Tp=std::基本字符串,std::分配器>,\U Alloc= 分配器, std::分配器>>]((长无符号整数)((映射*)this)->Map::i)) ==k'
为什么,在编译这段代码时,我会得到: main.cpp:32:错误:中的“operator==”不匹配 “((Map*)this)->Map::key。std::vector::operator[] _Tp=std::基本字符串,std::分配器>,\U Alloc= 分配器, std::分配器>>]((长无符号整数)((映射*)this)->Map::i)) ==k'C++ 运算符==dons';t存在于std::vector中? 类映射{ 私人: std::向量键; std::载体存储; int i; 公众: Map(); 映射*集(标准::字符串,标准::字符串); std::string get(std::string); }; Map::Map(){} 映射*映射::集(标准::字符串k,标准::字符串v){ 键。向后推(k); 储存。推回(v); i++; 返回(本); } std::string映射::get(std::string k){ for(int k=0;kMap::key。std::vector::operator[] _Tp=std::基本字符串,std::分配器>,\U Alloc= 分配器, std::分配器>>]((长无符号整数)((映射*)this)->Map::i)) ==k',c++,vector,operators,C++,Vector,Operators,为什么,在编译这段代码时,我会得到: main.cpp:32:错误:中的“operator==”不匹配 “((Map*)this)->Map::key。std::vector::operator[] _Tp=std::基本字符串,std::分配器>,\U Alloc= 分配器, std::分配器>>]((长无符号整数)((映射*)this)->Map::i)) ==k' 我的意思是,向量中真的不存在==运算符吗?您正在将std::vector key中的字符串值与int进行比较。这是不可能的 (
我的意思是,向量中真的不存在==运算符吗?您正在将
std::vector key
中的字符串值与int
进行比较。这是不可能的
(另一方面,
map
通常被实现为一个排序的二叉树)在for
-循环中,您使用名称k
和类型int
声明循环计数器,它隐藏了类型std::string
的参数的名称,原因是隐藏。
int k将参数std::string k隐藏起来,因此编译器会看到string==int,并且没有这样的比较器。您的迭代是错误的,不是键[i]==k输出错误。通常,比较
int
和string
是不可能的,但您可以这样进行比较:string.length
和int
或itoa(int)
和string
或……:)@loldop是的,我知道,但是我调用了std::string
方法参数,调用方式与for循环中的迭代器整数相同。而在<>代码> k>代码>中,我指的是这个论点,否则C++思维太糟糕了。
class Map {
private:
std::vector<std::string> key;
std::vector<std::string> storage;
int i;
public:
Map();
Map* set(std::string, std::string);
std::string get(std::string);
};
Map::Map() {}
Map* Map::set(std::string k, std::string v) {
key.push_back(k);
storage.push_back(v);
i++;
return (this);
}
std::string Map::get(std::string k) {
for (int k = 0; k < i; i++)
if (key[i] == k)
return storage[i];
}