Minuw 2023-06-13 15:42 采纳率: 0%
浏览 47
已结题

vc++6.0使用map

在vc++6.0中使用不了嵌套的map,也使用不了unordered_map,
如下

unordered_map<string, unordered_map<string, string>> oldIniMap
map<string, map<string, string>> oldIniMap

请问有什么方法能够代替嵌套map的作用,或者说vc++6.0怎样才能使用嵌套的map

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-13 19:34
    关注
    • 文章:vc使用map文件查找程序崩溃原因 中也许有你想要的答案,请看下吧
    • 除此之外, 这篇博客: C++面试高频知识点(一)中的 6.map与unordered_map 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      1. map
        • 是关联式容器,所有的元素都会根据元素的key值被排序。map的元素是pair,即拥有key值和value值,
        • 由于红黑树是一种平衡二叉树,自动排序效果很不错,故map以红黑树为底层结构,保证了一个较为稳定的动态操作时间,查询、插入,删除都是O(log n)
      2. unordered_map
        • 是关联式容器(无序容器),元素是pair,即拥有key值和value值。
        • 底层结构是哈希表,查询时间是O(1)

      未完待续…

    • 以下回答由chatgpt基于相关博客总结生成:

      答案:

      在vc++6.0中,由于其不支持C++11标准,不支持嵌套unordered_map,因此可以考虑使用嵌套map或其他数据结构进行替代。

      例如,可以使用数组来存储嵌套map的内容,或者使用其他的数据结构如vector等。具体使用哪种数据结构,需要根据具体的应用场景来进行选择。

      下面介绍一种使用嵌套map来实现树的最大宽度的方法:

      假设有一个二叉树,现在需要求出其最大宽度。可以使用宽度优先遍历的方法,将每层的节点用map存储,map的key表示节点在该层的位置,value表示该节点本身。

      具体步骤如下:

      1.定义一个队列q,将根节点压入队列中。

      2.定义一个map cur_level,在第一步时,将map的key值设为1,表示该节点在第一层,value值设为根节点。

      3.定义一个变量cur_width,表示当前层的宽度,初始化为1。

      4.从队列头部开始循环,每次取出一个节点,并将其左右子节点压入队列中。

      5.对于每个节点,将其从map中取出,并计算其位置(可在节点结构体中加入一个成员变量来表示该节点在该层的位置),将其插入到新的map next_level中。

      6.当当前节点为该层的最后一个节点时,将当前层的宽度与全局最大宽度cur_max_width比较,更新cur_max_width。

      7.将next_level作为cur_level,重复步骤4-6,直到队列为空。

      8.返回最大宽度cur_max_width。

      代码如下:

      struct Node {
          int val;
          Node* left;
          Node* right;
          int pos;  // 节点在该层的位置
          Node(int v) : val(v), left(NULL), right(NULL), pos(0) {}
      };
      
      int max_width(Node* root) {
          if (root == NULL)
              return 0;
          queue<Node*> q;
          q.push(root);
          map<int,Node*> cur_level;
          cur_level[1] = root;
          int cur_width = 1, cur_max_width = 1;
          while (!q.empty()) {
              Node* cur = q.front();
              q.pop();
              if (cur->left != NULL) {
                  cur->left->pos = cur->pos * 2 - 1;
                  q.push(cur->left);
                  cur_level[cur->left->pos] = cur->left;
              }
              if (cur->right != NULL) {
                  cur->right->pos = cur->pos * 2;
                  q.push(cur->right);
                  cur_level[cur->right->pos] = cur->right;
              }
              if (cur->pos == cur_width) {
                  cur_width = (cur_level.rbegin()->first - cur_level.begin()->first) / 2 + 1;
                  cur_max_width = max(cur_max_width, cur_width);
                  map<int,Node*> next_level;
                  cur_level.swap(next_level);
              }
          }
          return cur_max_width;
      }
      

      参考资料:

      1. 杨洋.《算法面试通关40讲》.人民邮电出版社.

      2. http://www.cplusplus.com/reference/unordered_map/unordered_map/

      3. https://hongjingyuan.com/vc++6.0/572118.shtml

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月14日
  • 创建了问题 6月13日

悬赏问题

  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错