Нет конца обучению. Всегда можно что-то улучшить. После всего, что я пытаюсь улучшить свои навыки 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; }