【问题标题】:STL map changed size automaticallySTL 地图自动改变大小
【发布时间】:2022-01-10 16:15:24
【问题描述】:

我创建了一个地图 mp 并只插入了一个键和值。当我调用 DFS 函数并进入它时,最初映射大小显示为 1。但是在 DFS 中的第一个 if 条件之后,映射将新的键值对 {0,0} 添加到现有映射并进入else if 条件,因为现在存在键 0。这是我写的代码

#include<vector>
#include<map>
#include<iostream>

using namespace std;

vector<bool> visited;
map<int, int> mp;

bool flag = true;

void DFS(int key)
{
    if (visited[key])
    {
        flag = false;
        return;
    }

    else if (mp.count(mp[mp[key]]) > 0)
    {
       
        visited[key] = true;
        DFS(mp[key]);
    }
}

bool canFinish(int numCourses, vector<vector<int>>& prerequisites)
{

    for (int i = 0; i < numCourses; i++)
    {
        visited.push_back(false);
    }

    for (auto prereq : prerequisites)
    {
        std::cout << prereq[0] << " "<<prereq[1] << "\n";
        mp.insert({ prereq[0],prereq[1] });
    }


    for (int i = 0; i < prerequisites.size(); i++)
    {
        DFS(prerequisites[i][0]);
        if (!flag) return false;
    }

    return true; 
}

int main()
{
    vector<vector<int>> prerequisites{ {1,0} };
    std::cout << canFinish(2, prerequisites);

}

【问题讨论】:

  • 如果[5] 不存在,您是否意识到mp[5] 会将{5, 0} 添加到地图中?
  • 这些都是您所做的真实陈述。所以没有人必须猜测你的问题是什么或问你可能会意识到什么,你能edit这个问题包含一个明确提出的问题吗?
  • 哦,我不知道。非常感谢

标签: c++ dictionary stl


【解决方案1】:

operator[] for map 将默认构造任何缺失的元素;请明确参阅cppreference。要检查地图中是否存在元素,您有几个选项:

  • 使用if (map.find(elem) != map.end())
  • 使用map.at(elem) 并捕获元素不存在时引发的异常
  • 使用if (map.count(elem) &gt; 0)检查键在map中出现的次数

我按个人喜好(大致)降序列出了这些。

【讨论】:

  • 还有contains成员函数,不过至少需要C++20。
  • 哦,是的,我仍然忘记了一些闪亮的 C++20 新特性;主要是因为我再过 5 年都不能在工作中使用它们 :(
猜你喜欢
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 2014-08-10
相关资源
最近更新 更多