簡體   English   中英

查找 std::list 是否包含來自另一個 std::list 的元素

[英]Find if std::list contains element from another 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。

有沒有比循環兩次更有效的方法? 這就是我目前所能想到的,所以任何幫助表示贊賞。

您可以將列表名稱中的一個(兩者中的較大者更好)存儲到set<string>然后遍歷另一個列表並查看該集合是否包含該元素。

這應該將您的運行時間從 O(m * n) 減少到 O(m * log(n))。

PS:我相信使用哈希表可以進一步減少 log(n) 因素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM