错误:' - &gt;'的基本操作数具有非指针类型'std :: pair <int,int =“”>'</int,>

时间:2014-01-11 05:30:29

标签: c++ compiler-errors

这是我对一个返回int数组的模式(最常见元素)的函数的可怕尝试。

标题中提到的错误在代码中被注释掉了。

我的理解是mappairs组成,所以我不知道问题是什么。

#include <iostream>
#include <map>

int mode(int* arrPtr, int size) { 
   assert (size > 0);
   std::map<int,int> M; 
   for (int k = 0; k < size; ++k) 
      M[*(arrPtr + k)]++;
   std::pair<int,int> maxpair(M.begin()->first, M.begin()->second);
   for (std::map<int,int>::iterator it = M.begin() + 1; it < M.end(); ++it) 
        if (it->second > maxpair->second) maxpair = *it; // ERROR HERE
   return maxpair->second;
} 


int main() { 

    int myArray[] = {1, 4, 5, 59, 1, -1, 4, 9, 1, 1, 9, -40};

    return 0;

} 

此外,还有一种更好的方法可以做到这一点。 C ++大师将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

替换:

if (it->second > maxpair->second)

使用:

if (it->second > maxpair.second)

如果您查看自己的计划,maxpair类型为std::pair<int, int> does not operator->已超载。

您尝试访问的是成员对象second,因此您应该使用maxpair.second

答案 1 :(得分:1)

迭代器的作用基本上就像一个指针,这就是你使用的原因 - &gt;在上面。您的std :: pair是一个值,因此您应该使用.而不是->

尝试:

if (it->second > maxpair.second) maxpair = *it;

P.S。由于复制对象所涉及的开销,maxpair = *它的分配可能很慢。如果你想要速度,最好将值存储为简单整数而不是成对对象。

P.P.S。如果您正在尝试找到该模式,那么您是否真的想要具有最大计数的值,而不是计数?