我正在寻找一种方法来从向量中删除重复项(我们称之为theGreatVector :D)。
我不能使用std::sort,然后使用std::unique,因为没有办法对我的对象进行排序。
theGreatVector包含一些vector (smallVectors)
我得到了vector 的==重载,所以可以使用它
我能够创建一个O(n²)的解决方案,但我需要更高的时间效率(theGreatVector.size()可能是10⁵或10⁶)
现在我得到了类似这样的东西(只有在smallOne不存在于myVec中时才填充它):
如果有一种方法可以在nlog(n) + n或任何低于n²的时间复杂度内完成,那将是非常棒的!非常感谢。Azh
theGreatVector包含一些vector (smallVectors)
我得到了vector 的==重载,所以可以使用它
我能够创建一个O(n²)的解决方案,但我需要更高的时间效率(theGreatVector.size()可能是10⁵或10⁶)
现在我得到了类似这样的东西(只有在smallOne不存在于myVec中时才填充它):
for(i=0;i<size;i++)
{
vector<Item*>smallOne = FindFacets(i)
if(smallOne doesnt belong to GreatOne) // this line already in O(n) :/
{
theGreatOne.push_back(smallOne);
}
}
如果有一种方法可以在nlog(n) + n或任何低于n²的时间复杂度内完成,那将是非常棒的!非常感谢。Azh
std::tie
放入一个std::tuple
中,并对其使用词典序排序。 - TemplateRex==
在vector<Item*>
上是做什么用的?它是比较size
和指针值,还是对指针进行解引用并比较其基础值?为什么你认为<
不能以类似的方式工作,Item
有什么奇怪的地方吗?通过“重复”,你是指重复的vector<Item*>
,还是在vector<Item*>
中的一个Item*
中重复出现的Item*
,或者是在vector<Item*>
中的一个Item*
中重复出现的Item
(我假设是第一种情况)?GreatOne
的顺序很重要吗?你有多频繁地添加、读取和修改它?按什么模式进行操作(大量添加,然后只有大量读取吗?) - Yakk - Adam Nevraumont