我有以下类型:
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;);
答案 0 :(得分:2)
std::map::find
返回一个迭代器。如果你想使用它,你必须先检查它:
auto mit = iterator->find("close");
if (mit != iterator->end()) {
sum += mit->second;
}
另一方面,您可以使用operator[]
代替(如果找不到密钥,则会将默认值插入地图中):
sum += (*iterator)["close"];