c++ - 查找 std::list 是否包含来自另一个 std::list 的元素
问题描述
我有两个清单:
std::list<MyClass1> listClass1;
std::list<MyClass2> listClass2;
为简单起见,假设它们具有以下元素:
listClass1
{id: 1, name: "Test1"}
{id: 2, name: "Test2"}
{id: 3, name: "Test3"}
{id: 4, name: "Test4"}
{id: 5, name: "Test5"}
listClass2
{id: 1, name: "Test2"}
{id: 2, name: "Test5"}
我需要查明listClass2
name
财产是否在listClass1
name
. 我的意思是,如果他们匹配。否则返回错误或-1。
有没有比循环两次更有效的方法?这就是我目前能想到的一切,所以任何帮助表示赞赏。
解决方案
您可以将列表名称中的一个(两者中的较大者更好)存储到 a 中set<string>
,然后遍历另一个列表并查看该集合是否包含该元素。
这应该将您的运行时间从 O(m * n) 减少到 O(m * log(n))。
PS:我相信使用哈希表可以进一步降低 log(n) 因子。
推荐阅读
- python - Altair '4.1.0' 返回一个空图表
- html - Angular HighCharts:错误:Highcharts 错误 #13
- arrays - C 编程错误:预期的表达式和值不是数组
- scala - 无法使用 HTTP 客户端访问 REST API
- html - 如何在html中放置可下载的pdf链接
- embedded - STM32F103蓝色药丸从头中断
- python - OpenCv 中错误的大小调整
- javascript - 我想在计算 Bot Latency 时编辑我的消息
- docker - 无法让 --env-file 将本地 .env 加载到 docker run
- regex - 片段 VS 代码正则表达式