天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 98|回复: 0

整个二维向量中去除完全相同的行

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 50 天

    [LV.5]常住居民I

    189

    主题

    151

    回帖

    1719

    积分

    管理员

    积分
    1719
    发表于 2024-3-19 12:29:18 | 显示全部楼层 |阅读模式
    1. #include <vector>
    2. #include <unordered_set>
    3. #include <algorithm>

    4. struct VectorHash {
    5.     size_t operator()(const std::vector<double>& vec) const {
    6.         size_t hash = 0;
    7.         for (double val : vec) {
    8.             hash ^= std::hash<double>{}(val) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
    9.         }
    10.         return hash;
    11.     }
    12. };

    13. bool equalVectors(const std::vector<double>& v1, const std::vector<double>& v2) {
    14.     if (v1.size() != v2.size()) return false;
    15.     std::sort(v1.begin(), v1.end());
    16.     std::sort(v2.begin(), v2.end());
    17.     return v1 == v2;
    18. }

    19. std::vector<std::vector<double>> removeDuplicateRows(const std::vector<std::vector<double>>& matrix) {
    20.     std::unordered_set<std::vector<double>, VectorHash, decltype(equalVectors)*> uniqueRows(&equalVectors);
    21.     std::vector<std::vector<double>> result;

    22.     for (const auto& row : matrix) {
    23.         if (uniqueRows.find(row) == uniqueRows.end()) {
    24.             // 如果当前行不在哈希集合中,则添加到结果向量和哈希集合中
    25.             result.push_back(row);
    26.             uniqueRows.insert(row);
    27.         }
    28.     }

    29.     return result;
    30. }

    31. int main() {
    32.     std::vector<std::vector<double>> matrix = {{1.0, 2.0, 2.0, 3.0},
    33.                                               {1.0, 2.0, 3.0, 1.0},
    34.                                               {3.0, 2.0, 2.0, 1.0},
    35.                                               {4.0, 4.0, 5.0},
    36.                                               {6.0, 6.0, 7.0, 7.0, 7.0}};

    37.     std::vector<std::vector<double>> result = removeDuplicateRows(matrix);

    38.     // 输出结果
    39.     for (const auto& row : result) {
    40.         for (double val : row) {
    41.             std::cout << val << " ";
    42.         }
    43.         std::cout << std::endl;
    44.     }

    45.     return 0;
    46. }
    复制代码

     

     

     

     

    整个二维向量中去除完全相同的行
    哎...膜结构车棚,签到来了1...
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-5-24 07:26 , Processed in 0.060198 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表