Szukam sposobu na usunięcie duplikatów z wektora (pozwala nazywać go GreatVector: D). Nie mogę użyć std :: sort, po którym następuje std :: unique, ponieważ nie ma sposobu na sortowanie moich obiektów.Usuwanie duplikatów z nie sortowalnego wektora
theGreatVector zawiera kilka vector<Item*>
(smallVectors)
mam przeciążenie == dla vector<Item*>
więc można go używać
jestem w stanie stworzyć coś de O (n²), ale muszę efektywności czasowej (theGreatVector.size() może być 10⁵ lub 10⁶)
teraz co mam jest coś takiego (wypełniam moje wektorze tylko jeśli smallOne isnt w nim):
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);
}
}
Jeśli istnieje sposób, aby to zrobić, nawet w nlog (n) + n lub cokolwiek niższym niż n², byłoby świetnie!
Thanks a lot
AZH
Jeśli masz równe wartości, możliwe jest, że możesz również zdefiniować porządkowanie i przeprowadzić sortowanie. – juanchopanza
co masz na myśli, że nie możesz sortować swoich obiektów? zawsze możesz 'std :: tie' każdy element danych na' std :: tuple' i użyć leksykograficznego porządkowania na tym – TemplateRex
Co robi twój '==' do on 'vector- '? Czy porównuje "rozmiar" i wartości wskaźnika, czy też odejmuje wskaźniki i porównuje wartość bazową? Dlaczego uważasz, że '<' nie może działać w podobny sposób, czy 'Pozycja' jest w jakiś sposób dziwny? Przez "duplikaty" rozumiesz duplikowanie 'wektora
- ' lub duplikowanie 'Item *' w jednym z 'wektora
- ' lub duplikowanie 'Item' w' Item * 'w jednym z' wektora
- '(zakładam pierwszy)? Czy kolejność "GreatOne" jest ważna? Jak często do niego dodajesz? Czytać? Modyfikować? W jakim schemacie (dużo dodaje, a potem tylko dużo czyta?) –
Yakk