0

我定义了一个结构和该结构的一个向量。我通过绑定类型的临时结构获取输入并将其推回向量中。

typedef struct {
        string bindername ;
        map<string ,long long int> m ;
        int index ;
    }bind ; 
    vector <bind> v ;

在 main 函数中,我声明了一个迭代器:

map <string ,long long int>::iterator it ;

当我试图通过迭代器访问向量的成员时,我遇到了错误。我试图像这样访问它:

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 ?

4

4 回答 4

3

你这样做it->second ()是一个函数调用,但second成员不是函数,它是一个整数。first向下两行对迭代器的元素执行相同操作。

于 2013-09-02T16:16:15.330 回答
2

的两个公共成员std::pair是对象,而不是函数。

it->second()应该如此it->second

于 2013-09-02T16:16:46.217 回答
1
if ((it->second ()) < b)
//              ^^

你有一组括号,所以编译器认为你错误地调用了一个函数。

于 2013-09-02T16:16:24.580 回答
1

it->second < b

第二个是数据成员,而不是函数。

于 2013-09-02T16:16:34.947 回答