Advertisement
alansam

Iterate over a std::map

Sep 8th, 2022
1,112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | Software | 0 0
  1. /*
  2.  *  How to store data in .txt file from map container in ios::binary mode? ...
  3.  *  Can anyone tell me ...
  4.  */
  5.  
  6. #include <iostream>
  7. #include <iomanip>
  8. #include <string>
  9. #include <fstream>
  10. #include <map>
  11. #include <algorithm>
  12.  
  13. using namespace std::literals::string_literals;
  14.  
  15. /*
  16.  *  iterate with a STL iterator
  17.  */
  18. void fnuc_iterator(void) {
  19.   std::map<std::string, int> mymap {
  20.     { "A - \u00a3 1,101.00"s, 1, },
  21.     { "A - \u20ac 222.00"s, 2, },
  22.     { "B - \u00a5 33,345,00"s, 3, },
  23.     { "C - \u20a9 34,567,00"s, 4, },
  24.     { "D - \u20a8 136,789,00"s, 5, },
  25.   };
  26.  
  27.   std::fstream wri("aiter.dat", std::ios::out | std::ios::binary);
  28.  
  29.   for (std::map<std::string, int> ::const_iterator it = mymap.begin(); it != mymap.end(); it++) {
  30.     // wri.write((char *) it->first, sizeof(mymap));
  31.     // wri.write((char *) it->second, sizeof(mymap));
  32.     std::cout << std::setw(5) << it->second
  33.               << ", "s
  34.               << std::quoted(it->first)
  35.               << '\n';
  36.     wri.write(it->first.c_str(), it->first.size());
  37.     wri.write(reinterpret_cast<char const *>(&it->second), sizeof(int));
  38.   }
  39.  
  40.   std::cout << std::endl;
  41. }
  42.  
  43. /*
  44.  *  iterate with range based loop
  45.  */
  46. void fnuc_rbloop(void) {
  47.   std::map<std::string, int> mymap {
  48.     { "a - \u00a3 1,101.00"s, 11, },
  49.     { "a - \u20ac 222.00"s, 12, },
  50.     { "b - \u00a5 33,345,00"s, 13, },
  51.     { "c - \u20a9 34,567,00"s, 14, },
  52.     { "d - \u20a8 136,789,00"s, 15, },
  53.   };
  54.  
  55.   std::fstream wri("bloop.dat", std::ios::out | std::ios::binary);
  56.  
  57.   //  kv is a std::pair
  58.   for (auto const & kv : mymap) {
  59.     std::cout << std::setw(5) << kv.second
  60.               << ", "s
  61.               << std::quoted(kv.first)
  62.               << '\n';
  63.     wri.write(kv.first.c_str(), kv.first.size());
  64.     wri.write(reinterpret_cast<char const *>(&kv.second), sizeof(int));
  65.   }
  66.  
  67.   std::cout << std::endl;
  68. }
  69.  
  70. /*
  71.  *  iterate with STL for_each() algorithm
  72.  */
  73. void fnuc_freach(void) {
  74.   std::map<std::string, int> mymap {
  75.     { "\u03b1 - \u00a3 1,101.00"s, 21, },
  76.     { "\u03b1 - \u20ac 222.00"s, 22, },
  77.     { "\u03b2 - \u00a5 33,345,00"s, 23, },
  78.     { "\u03b3 - \u20a9 34,567,00"s, 24, },
  79.     { "\u03b4 - \u20a8 136,789,00"s, 25, },
  80.   };
  81.  
  82.   std::fstream wri("freach.dat", std::ios::out | std::ios::binary);
  83.  
  84.   std::for_each(mymap.cbegin(), mymap.cend(), [&wri](auto const & kv) {
  85.     std::cout << std::setw(5) << kv.second
  86.               << ", "s
  87.               << std::quoted(kv.first)
  88.               << '\n';
  89.     wri.write(kv.first.c_str(), kv.first.size());
  90.     wri.write(reinterpret_cast<char const *>(&kv.second), sizeof(int));
  91.   });
  92.  
  93.   std::cout << std::endl;
  94. }
  95.  
  96. // ???
  97. int main(int argc, char const * argv[]) {
  98.  
  99.   fnuc_iterator();
  100.   fnuc_rbloop();
  101.   fnuc_freach();
  102.  
  103.   return 0;
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement