c++ - 检查两个数组是否相等

标签 c++ arrays algorithm equality unordered-map

我想知道两个给定的数组是否相等,无论元素的排列如何但包含相同的元素并且所有元素的频率必须相同。

    int SameArray(int arr1[], int arr2[], int N, int M)
    {
        unordered_map<int, int> ump;
        if(N == M)
        {
            for(int i = 0; i < N; i++)
            {
                ump[arr1[i]]++;
            }
            for(int i = 0; i< M; i++)
            {
                if(ump.find(arr2[i]) != ump.end())
                    ump[arr2[i]]--;
            }
            if(ump.empty())
            return 1;
        }
        return 0;
    }

它没有显示任何错误,但输出始终为 0。

最佳答案

您正在寻找 std::is_permutation :

bool SameArray(const std::vector<int>& arr1, const std::vector<int>& arr2) {
    return std::is_permutation(arr1.begin(), arr1.end(), arr2.begin(), arr2.end());
}

我擅自将您的函数返回 bool 并取 std::vector s 作为函数参数,因为这是 C++ 而不是 C。

如果您对 std::permutation 的比较工作方式感到好奇,请查看其 example implementation .

关于c++ - 检查两个数组是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58392780/

相关文章:

python - 如何自动检测列是否为分类列?

c# - 计算两个矩形之间的交集面积

algorithm - 寻路算法测试工具

c++ - 使用不同的键类型重载 std::map

c++ - Bash 自动完成选项而不运行应用程序

c++ - 建议为 C++ 选择线性代数库

javascript - 从 JS 数组返回信息以用作全局变量

c++ - 如何从 lua_topointer 访问 lua 的对象?

php - array_chunk 根据键值添加文本并输出到文件

c - 如何编写一个原型(prototype)为 'void convertstring(char *)' 的函数,在 C 中将小写字母转换为大写字母?