c++ - 访问一个 vector ,它是映射中的一个值,以与另一个 vector 在其上运行相等运算符

标签 c++ vector dictionary stl

我有一个由具有以下类型定义的 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/

相关文章:

python - 将新项目添加到基于其他项目值进行控制的字典列表中

C++ shared_mutex 实现

c++ - 如何判断模板类型是否是模板类的实例?

c++ - 使用 foreach 循环修改 Qt 数据结构的正确方法

r - 如何使用 R 函数将向量转换为矩阵?

javascript - JavaScript绘制流程图的绘图库

c++ - 如何安全地将 std::vector 的内容复制到 c 样式的静态数组?

C++:在多集容器中使用自己的类

python - 将多个元组添加到单个字典键而不合并元组?

c# - JSON 基于字典键推断类类型