首页 > 解决方案 > 在 Set/Map 中使用向量作为键的 C++ 不会产生唯一答案

问题描述

我正在研究一个 Leetcode 问题,并且厌倦了以向量为键的集合。但是,它无法确保我的结果中没有重复项。我也尝试使用 Map,但甚至无法打印它的值,因为我相信我不知道如何打印包含 int 向量作为键的 map 值。请让我知道我在代码中做错了什么以及为什么它不起作用。此外,如何使用地图打印整个矢量键。

我的代码如下:

class Solution 
{
   public:
      vector<vector<int>> permuteUnique(vector<int>& nums) 
      {

         vector<vector<int>>result;
         permutations(nums,0,result);

         return result; 

      }

      void permutations(vector<int>&nums, int l, vector<vector<int>>&result)
      {
         set<vector<int>>s;
         if(l>=nums.size())
         {
            if(s.find(nums)==s.end())
            {
               s.insert(nums);
               result.push_back(nums);
               return;
            }

            else if(s.find(nums)!=s.end())
               return;
         }

         for(int i=l;i<nums.size();i++)
         {
            swap(nums[l],nums[i]);
            permutations(nums,l+1,result);
            swap(nums[l],nums[i]);
         }
      }
};

标签: c++vectorhashmapmapsstd

解决方案


您的假设是错误的 -std::set< std::vector<int> >对向量的内容进行了“完整”比较。所以使用 as key 不应该给你怀疑的关键错误——它和std::set< std::string >你熟悉的一样好std::string。文档链接:https ://en.cppreference.com/w/cpp/container/vector/operator_cmp


推荐阅读