【问题标题】:how to link data in multiple multimaps together (C++)?如何将多个多图中的数据链接在一起(C++)?
【发布时间】:2013-04-01 04:14:20
【问题描述】:

我将数据存储在 2 个多图中。数据是一个结构,由 6 个变量组成:

struct data {
    int var
    string var
    string var
    string symbol
    int price
    int var
};

现在我需要按symbol 对多图中的数据进行排序。如果符号相同,请转到price。在一个多重映射中,我从price 高到低,反之亦然。例如,在multimap1 中,我有symbol_1 50 symbol_1 45。在multimap2,我有symbol_2 30symbol_2 35。因为我按两个值排序,所以我使用结构作为多图的键。该结构由符号名称和价格组成,用于对数据进行排序。

如果以下问题是可能的(我认为不可能),那么我认为,我的问题的第二部分不需要回答。是否可以仅使用部分键搜索两个多图。例如,我希望能够使用multimap.equal_range() 或任何其他方法(或算法)来找到具有相同符号的所有数据,而不管价格如何。问题是键有两个值,我只想搜索 2 个值中的 1 个。

我认为这是不可能的,所以我使用字符串作为符号(以搜索符号名称)创建了另外 2 个多重映射,并将 data 作为值。现在我可以找到所有具有相同名称的符号。我现在面临的问题是两个多图中的数据没有链接。我想要的是,如果我修改multimap1_search(用于搜索的多图)中的数据,那么它也会修改multimap1中的相同数据,或者至少能够修改两个多图中相同的data值.请记住,2 个多图中的数据顺序不同。这可能吗?你们建议使用其他数据结构吗?我只能使用 C++ STL。我无权访问 boost 或任何其他库。此外,该计划的主要重点是效率。

另外,一般来说,您如何修改多图中的值。您是否删除它并插入另一个值?如果要修改很多值,是否有更好的数据结构可以使用?我要做很多工作,插入、搜索和修改(可能还有删除)。

【问题讨论】:

    标签: c++ data-structures stl containers multimap


    【解决方案1】:

    如果您的多图先按符号排序,然后按价格排序,您可以使用multimap::lower_boundmultimap::upper_bound 遍历具有指定符号的元素范围。在按从最低到最高排序的地图中搜索时,调用lower_bound 时设置价格为INT_MIN,调用upper_bound 时设置为INT_MAX

    另外,一般来说,你如何修改多图中的值

    要修改 ,您可以分配给它。要修改 key,您必须删除它并插入一个新的。

    【讨论】:

    • 即使价格不是INT_MIN(即最低价格为30),这仍然有效吗?没关系,看看 cplusplus.com,这会很好用。非常感谢。
    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    相关资源
    最近更新 更多