0

我将数据存储在 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 30 symbol_2 35。因为我按两个值排序,所以我使用结构作为多图的键。该结构由符号名称和价格组成,用于对数据进行排序。

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

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

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

4

1 回答 1

1

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

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

要修改,您可以分配给它。要修改密钥,您必须将其删除并插入一个新密钥。

于 2013-04-01T04:30:52.243 回答