如何在std :: vector迭代器中访问std :: map属性?

时间:2016-04-08 19:10:20

标签: c++ c++11 dictionary vector stl

我有以下类型:

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");
}

然而,当我这样做时,我收到以下错误:

  

错误:二进制表达式的操作数无效(&#39; double&#39;&#39; iterator&#39;(又名         &#39; __ map_iterator&lt; __ tree_iterator,double&gt;,         std :: __ 1 :: __ tree_node,double&gt;,void *&gt; *,长&gt; &GT;&#39))           sum + = iterator-&gt; find(&#34; close&#34;);

我也尝试过:

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

但这会产生类似的错误:

  

二进制表达式的操作数无效(&#39; double&#39;&#39; iterator&#39;(又名         &#39; __ map_iterator&lt; __ tree_iterator,double&gt;,         std :: __ 1 :: __ tree_node,double&gt;,void *&gt; *,长&gt; &GT;&#39))           sum + =(* iterator).find(&#34; close&#34;);

1 个答案:

答案 0 :(得分:2)

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

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

另一方面,您可以使用operator[]代替(如果找不到密钥,则会将默认值插入地图中):

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