C++ 如何修复:无法获取集合中元素的索引

C++ 如何修复:无法获取集合中元素的索引,c++,set,C++,Set,如果我有一组字符串: std::set<string> my_set; 其中store是类的向量,其中包含字符串名称作为字段。 我做错了什么,否则如何得到集合元素的索引 我当前得到的错误是: error: no match for ‘operator[]’ (operand types are ‘std::set<std::__cxx11::basic_string<char> >’ 错误:“运算符[]”不匹配(操作数类型为“std::set” 如错误消息

如果我有一组字符串:

std::set<string> my_set;
其中store是
的向量,其中包含字符串
名称
作为字段。 我做错了什么,否则如何得到集合元素的索引

我当前得到的错误是:

error: no match for ‘operator[]’ (operand types are ‘std::set<std::__cxx11::basic_string<char> >’
错误:“运算符[]”不匹配(操作数类型为“std::set”

如错误消息所示,没有
运算符[]

您已经有了一个迭代器,因此可以使用它访问元素

auto it = std::find(my_set.begin(), my_set.end(), string_to_find);
if (it != my_set.end()){
    for (auto s : store){
        if(s.name == *it){
            s.item += 1;
        }
    }
}

如错误消息所示,没有
运算符[]

您已经有了一个迭代器,因此可以使用它访问元素

auto it = std::find(my_set.begin(), my_set.end(), string_to_find);
if (it != my_set.end()){
    for (auto s : store){
        if(s.name == *it){
            s.item += 1;
        }
    }
}

std::set
不实现
运算符[]
,因为它不连续存储元素,也无法通过索引直接访问元素

改变

if(s.name == my_set[index]){


应该可以工作。

std::set
未实现
运算符[]
,因为它不连续存储元素,并且无法通过索引直接访问它

改变

if(s.name == my_set[index]){


应该可以工作。

这看起来像。为什么需要“索引”?取消对迭代器
的引用的方法不是尝试将其转换为索引并调用
运算符[]
,而是调用
*它
。这看起来像。为什么需要“索引”?取消对迭代器
的引用的方法不是试图将其转换为索引并调用
运算符[]
,而是调用
*它