我有一个由具有以下类型定义的 map 组成的 vector :
std::map< int, std::vector<int> >
因此, vector 本身的定义是:
std::vector< std::map< int, std::vector<int> > >
现在我正在创建一个整数 vector 并将其插入到具有整数键的映射中,并将映射本身添加到外部 vector 中:
std::map<int, std::vector<int> > vDescriptorAtom;
vDescriptorAtom.insert( std::make_pair(498, vListOfIds) );
messageDescriptorVector.push_back( vDescriptorAtom );
其中 vListOfIds 本身是一个整数 vector 。
在稍后阶段,我想提取内部 vector 并与我拥有的另一个 vector 进行比较。我的印象是我可以轻松使用 ==
两个 vector 之间的运算符进行比较。但是我在这样做时遇到了一些麻烦。
我试过:
for ( int i = 0 ; i <= messageDescriptorVector.size(); i++ )
{
if ( current_tag_stack == (messageDescriptorVector.at(i))->second )
{
vFoundMatchingDescriptor = true;
break;
}
}
注意 current_tag_stack 有如下定义:
std::vector<int> current_tag_stack;
但是我得到了这个错误:
base operand of â->â has non-pointer type âstd::map<int, std::vector<int, std::allocator<int> >, std::less<int>, std::allocator<std::pair<const int, std::vector<int, std::allocator<int> > > > >â
我做错了什么?
编辑
正如评论所建议的那样,我尝试访问存储在 map 中的 vector :messageDescriptorVector.at(i).second
但它给了我这个错误:âclass std::map<int, std::vector<int, std::allocator<int> >, std::less<int>, std::allocator<std::pair<const int, std::vector<int, std::allocator<int> > > > >â has no member named âsecondâ
最佳答案
messageDescriptorVector.at(i)
是一张 map 。您必须获取该 map 的一个元素,才能获得它的 second
并将其与您的引用 vector 进行比较。所以你需要多一层迭代。
for ( int i = 0 ; i < messageDescriptorVector.size(); i++ )
{
auto& m = messageDescriptorVector.at(i); // m is a map<int, vector<int>>
for (auto& p : m) // p is a ref to pair<int, vector<int>>
{
if ( current_tag_stack == p.second )
{
// do something ....
或者只是
for (auto& m : messageDescriptorVector)
{
for (auto& p : m)
{
if ( current_tag_stack == p.second )
{
// do something ....
关于c++ - 访问一个 vector ,它是映射中的一个值,以与另一个 vector 在其上运行相等运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19542917/