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++ 运算符==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进行比较。这是不可能的 (

为什么,在编译这段代码时,我会得到:

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
进行比较。这是不可能的


(另一方面,
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];
}