Нет конца обучению. Всегда можно что-то улучшить. После всего, что я пытаюсь улучшить свои навыки C++. Больше похоже на попытку приблизить его к моим чертовым** навыкам программирования на Python.



В этом примере карты C++ хранится двумерный массив для каждого ключа.

#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
    std::map<int, std::vector<std::vector<int>>> m;
    
    std::vector<int> v1;
    v1 = {1,2,3,4,1};
    m[0].push_back(v1);
    std::vector<int> v2;
    v2 = {2,3,4,5,1};
    m[0].push_back(v2);
    
    int key = 0;
    if (m.count(key)){
        std::cout<<"key found "<<m.count(key)<<"\n";
        
        vector<vector<int>> v = m[0];
        for(auto itv:v)
        {
          vector<int> vv = itv;
          for(auto itvv:vv)
          {
             int i = itvv;
             std::cout<<i<<"\t";
          }
          std::cout<<"\n";
        }
    }
/*  // Also use this
    for(auto it:m)
    { 
     vector<vector<int>> v = it.second;
     for(auto itv:v)
     {
      vector<int> vv = itv;
      for(auto itvv:vv)
      {
       int i = itvv;
       std::cout<<i<<"\t";
      }
     std::cout<<"\n";
     }
    std::cout<<"\n\n";
    }
*/
return 0;
}

Другой пример

#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
    std::map<int, std::vector<std::vector<int>>> m;
    int BUCKET_CNT = 4;
    
    std::vector<int> v1;
    v1 = {1,2,3,4,1};
    m[0].push_back(v1);
std::vector<int> v2;
    v2 = {2,3,4,5,1};
    m[0].push_back(v2);
    
    int block[] = {1,2,3,5};
    
    int bid = 0;
    
    if (m.count(bid)){
        int n = m[bid].size();
        std::cout<<"key "<<bid<<" found total ="<< n <<" times\n";
        std::cout<<" * test m[0][1][2] = "<<m[0][1][2]<<"\n";
        
        //vector<vector<int>> v = m[bid];
        int i = 0;
        while (i < n)
        {
            
      int j = 0;
      while (j < BUCKET_CNT)
      {   
          std::cout<<"compare"<<m[bid][i][j] <<" "<< block[j]<<"\n";
          if (m[bid][i][j] == block[j])
          {
              j++;
              if (j==BUCKET_CNT)
              {
                  m[bid][i][j] += 1;
                  std::cout<<" * matched all buckets. New count:"<<m[bid][i][j]<<"\n";
                  i = n; // terminate
              }
          }
          else{
              std::cout<<" * profile not a match.\n";
              j = 4;
          }
          
          
          /*{
           int i = itvv;
           std::cout<<i<<"\t";
           std::cout<<"\n";
}*/
      }
      i += 1; //go to next vector
      //
      
      if (i==n){ // no match found
              std::vector  <int> vn;
              vn = {0,0,0,0,1};
                    
                    for (int k=0; k<BUCKET_CNT; k++)
              {
                  vn[k] = block[k];
                  i = n; // terminate
              }
              
              vn[BUCKET_CNT] = 1;
              std::cout<<" * created new bucket.\n";
              m[bid].push_back(vn);
}
      
     }
    }
    else// first time seeing this bid 
    {
        
        
    }
    
    return 0;
}