我定义了结构和结构的向量。我通过类型bind的临时结构接受输入并将其推回到向量中。
typedef struct {
string bindername ;
map<string ,long long int> m ;
int index ;
}bind ;
vector <bind> v ;
在main函数中,我将迭代器声明为:
map <string ,long long int>::iterator it ;
当我试图通过迭代器访问vector的成员时,我遇到了错误。 我试图像这样访问它:
int l = v.size () ;
for (int K = 0 ; K < l ; K++)
{
for (it = v[K].m.begin () ;it != v[K].m.end () ; it++) // this line is generating errors
{
if ((it->second ()) < b) //this line is also generating errors // b is an int
{
cout << it -> first () << endl ;
c++ ;
}
}
生成错误:
b.cpp: In function ‘int main()’:
b.cpp:84:22: error: ‘it.std::_Rb_tree_iterator<_Tp>::operator-> [with _Tp = std::pair<const std::basic_string<char>, long long int>, std::_Rb_tree_iterator<_Tp>::pointer = std::pair<const std::basic_string<char>, long long int>*]()->std::pair<const std::basic_string<char>, long long int>::second’ cannot be used as a function
b.cpp:86:27: error: no match for call to ‘(const std::basic_string<char>) ()’
如何通过迭代器访问V [K] .m的第二个元素来检查它是否小于b?
答案 0 :(得分:3)
你做it->second ()
这是一个函数调用,但second
成员不是函数,它是一个整数。你对迭代器的first
元素做了两行。
答案 1 :(得分:2)
std::pair
的两个公共成员是对象,而不是函数。
因此it->second()
应为it->second
。
答案 2 :(得分:1)
if ((it->second ()) < b)
// ^^
你有一组括号,所以编译器认为你错误地调用了一个函数。
答案 3 :(得分:1)
it->second < b
第二个是数据成员,而不是函数。