【问题标题】:Can we have a map like this in c++ >> map <vector<int>,vector<int>> m;我们可以在 c++ 中有这样的映射吗? >> map <vector<int>,vector<int>> m;
【发布时间】:2022-11-04 22:01:49
【问题描述】:

直到现在我才想到一个想法,我已经制作了字符串和向量的映射 像这样 map&lt;int,int&gt; m; map &lt;int,vector&lt;int&gt;&gt; m; map &lt;string,vector&lt;int&gt;&gt; m; 其他数据类型也可以进行各种组合。

但是如果我这样做会发生什么 map &lt;vector&lt;int&gt;,vector&lt;int&gt;&gt; m; or map &lt;vector&lt;int&gt;,vector&lt;vector&lt;int&gt;&gt;&gt; m; 等等

我正在解决一个问题 leetcode,其中这种格式可能会有所帮助 https://leetcode.com/contest/biweekly-contest-90/problems/odd-string-difference/ 我试过这样

class Solution {
public:
    string oddString(vector<string>& words) {
        map <vector<int>,vector<string>> m;
        for(auto i:words)
        {
            // m[{int(i[0]-i[1]), int(i[1]-i[2])}].push_back(i);
            vector<int> v;
            for(int j=1;j<i.size();j++)
            {
                v.push_back(int(i[j]-i[j-1]));
            }
        }
        for(auto i:m)
        {
            if(i.second.size() ==1)
            {
                return i.second[0];
            }
        }
        return "";
    }
};

【问题讨论】:

  • 当你尝试时发生了什么?您可能想添加一个int main(),以便其他人可以测试。单独的解决方案类不是minimal reproducible example
  • 我通常对这类问题的回答是“为什么你认为你不能?”但是你必须保持低调,其中一个模组认为人们自己尝试东西是纯粹的邪恶。
  • 有什么用?它会让你做什么?您将如何使用它并选择其中一个映射向量?
  • 值类型基本无关;但在某些情况下,您可能无法使用[]。至于键类型:只要类型与同类型的对象可比较,就可以使用std::map,默认比较...std::vector实现比较运算符...
  • 不会发生什么特别的事情,您只需将std::vector&lt;std::string&gt; 作为地图中的键。向量的默认operator&lt; 只是按字典顺序比较所有元素。对我来说听起来效率不高,但无论如何你都可以使用它。

标签: c++


【解决方案1】:

std::vector&lt;int&gt; 用作std::map 中的键是完全可以的,但您需要查看将给定类型用作std::map 中的键的要求。

来自the documentation

std::map 是一个排序的关联容器,包含具有唯一键的键值对。使用比较函数比较对键进行排序。搜索、删除和插入操作具有对数复杂性。地图通常实现为红黑树。

强调我的

所以 Key 类型必须满足Compare 的要求。

默认情况下,std::map 使用 std::less&lt;Key&gt;std::less&lt;std::vector&lt;int&gt;&gt; 或换句话说 std::vector::operator&lt;() 按字典顺序比较向量中的值。
如果您想要其他东西,则必须在实例化地图时提供自己的比较功能:

std::map<std::vector<int>, my_value_type, my_compare_function> my_map; // Note the third parameter is the compare function.

【讨论】:

    【解决方案2】:

    是的

    The documentation for std::map 声明您可以使用您提供的任何类型相比()它具有的功能运算符<.

    这是矢量的情况,所以它会起作用。

    也就是说,您需要考虑您要解决的问题。我想不出有一个矢量键映射是一个很好的解决方案>>>的任何问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-18
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      相关资源
      最近更新 更多