繁体   English   中英

如何访问std :: vector迭代器内的std :: map属性?

[英]How can I access an std::map property inside an std::vector iterator?

我有以下类型:

typedef std::map<std::string, double> Tick;

和一个向量:

std::vector<Tick> dataSegment;

我想遍历向量并计算每个地图项的特定属性的总和:

double sum = 0.0;

for (std::vector<Tick>::iterator iterator = dataSegment.begin(); iterator != dataSegment.end(); ++iterator) {
    sum += iterator->find("close");
}

但是,当我这样做时,出现以下错误:

错误:对二进制表达式无效的操作数(“ double”和“ iterator”(aka'__map_iterator <__ tree_iterator,double>,std :: __ 1 :: __ tree_node,double>,void *> *,long>>'))总和== iterator-> find(“ close”);

我也尝试过:

for (std::vector<Tick>::iterator iterator = dataSegment.begin(); iterator != dataSegment.end(); ++iterator) {
    sum += (*iterator).find("close");
}

但这会产生类似的错误:

二元表达式的无效操作数('double'和'iterator'(aka'__map_iterator <__ tree_iterator,double>,std :: __ 1 :: __ tree_node,double>,void *> *,long>>'))sum + =(* iterator).find(“ close”);

std::map::find返回一个迭代器。 如果要使用它,则必须首先检查它:

auto mit = iterator->find("close");
if (mit != iterator->end()) {
    sum += mit->second;
}

另一方面,您可以改用operator[] (如果未找到键,它将在地图中插入默认值):

sum += (*iterator)["close"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM