【发布时间】:2019-02-16 05:37:02
【问题描述】:
假设我有一张地图,其值如下所述:
std::map<int, std::set<int>> myMap;
key 0: 1,2,3,4,5,6,7,8,9,10
key 1: 1,2,3,4,5,6
key 2: 4,5,6,7
key 3: 6,7
现在,我想删除键 0 中的所有值,这些值存在于它后面的其他键中。对于键 1 类似,依此类推。 所以,最终的输出(myMap)应该是这样的:
key 0: 8,9,10
key 1: 1,2,3
key 2: 4,5
key 3: 6,7
据我所知,按地图中的值进行搜索并不容易。对于我的代码,按值搜索是不可行的,因为我的数据非常大。这将非常耗时。
有没有更好的方法来做到这一点,而无需遍历以下每个键中的每个值来删除公共值?
【问题讨论】:
-
他们是如何进入地图的?
-
这些值实际上是我在应用程序中拥有的每个循环的基本块。我从支持工具中得到它。插入时无法进行检查,因为我使用的是其他工具提供的数据。
-
您打算如何在不实际检查那些 key 的情况下找出任何 key 中是否存在 x?根据物理定律,这根本不可能。如果您愿意,可以通过在第二个容器中创建某种索引来加快它的速度,并且如果值得为创建所述索引增加内存/时间成本 - 如果您只这样做一次,那么不太可能。
-
当您使用数据时,在运行中执行此操作确实可能更容易,但如果不知道您要做什么,就不可能说出来。 minimal reproducible example 会有所帮助。