gpt4 book ai didi

c++ - 使用 std::map 或 std::multimap 对数据进行排序

转载 作者:行者123 更新时间:2023-11-28 08:24:02 24 4
gpt4 key购买 nike

新年快乐。希望大家都没事。我有一段时间没来了。

我有一些隐形眼镜数据要整理。我有一些排序规则是静态的(硬编码的),后面跟着其他规则形成“正常”规则

要求如下:

  1. 首先按公司和产品排序是静态顺序(硬编码,非字母顺序)

    示例

    o 公司产品名称

    1. Ciba 1. Focus,2. AirOptics,3. Dailies,4. 然后按字母顺序排列。
    2. Bausch & Lomb 1. PureVision,2. LiquidEye,3.Softlens,然后按字母顺序排列。
  2. 其次是包大小降序(80、30 ...)

  3. 随后是基曲线降序 (8.6, 8,0 ...)

  4. 之后是球体降序(-0.5, 0.0, 1.0 ...)

最终结果可能如下所示

Sample data
CO PR PS BC Sp
-------------------------------
Ciba Focus 10 8.6 0.00
Ciba Focus 20 8.6 -0.25
Ciba Focus 20 8.6 -0.10
Ciba Focus 20 8.6 +0.25
Ciba Air 10 8.6 -0.25
Ciba Air 10 8.6 -0.10
Ciba Air 20 8.1 -0.25
Ciba Air 20 8.1 -0.10
Ciba Air 20 8.1 0.00
Ciba Air 20 8.6 +0.25
Ciba Air 20 8.6 +0.40

数据与其他数据包含在一个结构中。该结构在带有键的 map 中使用。我正在构建一个 key 来对静态要求进行排序,如下所示。

键在键的前面包含一个前缀以强制静态排序(非字母顺序),后跟一个后缀以使键唯一。示例键:“1_1_Ciba_Focus Monthlys_4”

我对其他要求进行排序的计划是获取每个其他要求(PackageSize、Base Curve 和 Sphere)并使用键根据前一个元素对它们进行排序。

因为我将根据包大小 (10、20 ...) 对以下内容进行排序 - 也许我应该使用多重映射,因为在键末尾没有唯一 ID 的情况下对这些东西进行排序可能是复活节??

使用“1_1_Ciba Focus”键,我将对 PackSize 进行排序,然后设置键以生成正确的排序

start: (std::multimap)
key: 1_1_Ciba Focus"
Sample data
CO PR Key
-------------------------------
Ciba Focus 1_1_Ciba Focus
Ciba Focus 1_1_Ciba Focus
Ciba Focus 1_1_Ciba Focus
Ciba Focus 1_1_Ciba Focus

Sample data
CO PR PS Key
-------------------------------
Ciba Focus 10 1_1_1_Ciba Focus
Ciba Focus 20 1_1_2_Ciba Focus
Ciba Focus 20 1_1_2_Ciba Focus
Ciba Focus 20 1_1_2_Ciba Focus

谢谢,克里斯克里斯@macgowan.com

最佳答案

您可以编写一个可以考虑任意数量条件的比较仿函数。这个想法是从最重要的标准开始,然后仅当较高级别相等时才在列表中向下移动。

struct LensCompare
{
bool operator()(const Data & left, const Data & right)
{
if (left.key < right.key)
return true;
else if (right.key < left.key)
return false;
if (left.PR < right.PR)
return false; // for descending order return "false" when less than
else if (right.PR < left.PR)
return true;
if (left.BC < right.BC)
return false;
else if (right.BC < left.BC)
return true;
return right.Sp < left.Sp;
}
};

关于c++ - 使用 std::map 或 std::multimap 对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com