Vector Sort en Unique

Status
Niet open voor verdere reacties.

XXL66

Gebruiker
Lid geworden
11 dec 2007
Berichten
13
hallo ik pas onderstaande toe om te sorteren en dit werkt perfect (mijn struct bevat wel double ipv int)

Nu dacht dat dit ook zou werken met UNIQUE met een predicate.
Maar dit schijnt mij niet te lukken, krijg allezins vreemde resultaten.
Ik heb ook met tollerantie geprobeerd.

Iemand een idee hoe ik uit een vector van struct de dubbels (op basis double in de struct )kan verwijderen ?

thx !


#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

using namespace std;

class MyData
{
public:
int m_iData;
string m_strSomeOtherData;
};

bool MyDataSortPredicate(const MyData& lhs, const MyData& rhs)
{
return lhs.m_iData < rhs.m_iData;
}

int main()
{
// Create list
vector myvector;

// Add data to the vector
MyData data;
data.m_iData = 3;
myvector.push_back(data);
data.m_iData = 1;
myvector.push_back(data);

// Sort the vector using predicate and std::sort
std::sort(myvector.begin(), myvector.end(), MyDataSortPredicate);

// Dump the vector to check the result
for (vector::const_iterator citer = myvector.begin();
citer != myvector.end(); ++citer)
{
cout << (*citer).m_iData << endl;
}

return 1;

}
 
Is er een rede waarom je voor een vector kiest en niet voor een set?
een set lijkt me hier toch wel het gepaste datatype vermits een set automatisch sorteert & geen dubbels toelaat...

http://www.sgi.com/tech/stl/set.html

Als je wilt blijven werken met een vector ( wat ik niet aanraad ) is het dan niet eenvoudiger om te voorkomen dat een dubbels worden toegevoegd dan dat ze achteraf worden verwijderd? Het eerste is een simpele for lus, terwijl het laatste een toekenning, for lus en verwijdering inhoud ( ook niet echt moeilijk maar toch ).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan