Hej alla glada mäniskor! 1. Använd inte CString - det är en gammal klass från ms. Kör med den inbyggda std::string istället. Varför inte använda en map (eller multimap om det kan finna flera med samma namn). Då blir den ju sorterad från början. Jag behöver använda CString för att visa texten i en EDIT-ruta i mitt program.. Jag ber om ursäkt för otydligheten... om jag använder "std::string" blir det bara jobbigt med konvertering... CString går väl också att använda med standardalgoritmer. Angående string vs CString. Okej, det må vara hänt. Jag får tyvärr inget exempel att funka... Har inte tid nu, men sök på "C++ STL sort example" så ska du nog hitta något. Bind där är onödigt ur viss synvinkel, även om det på sitt sätt är renare.Sortering??
Jag behöver sortera en vector utav en class variabel.
class info1
{
public:
CString namn;
CString adress;
};
vector<info1> data;
I det här fallet data!
Jag vill sortera efter namn.
Jag sparar allt i en .txt fil när jag avslutar och vill ha allt i bokstavs ordning.
Jag läser in informationen när jag startar programmet så att jag kan lägga till
information och ta bort information.
Tack på förhand...
// Eric
Sv: Sortering??
2. Ha helst inte variablerna som publika. Det är bättre att använda åtkomstmetoder.
3. Definiera jämförelseoperatorerna <, > osv. typ:
class info
{
public:
std::string namn;
std::string adress;
bool operator< (const info &p){
return (namn < p.namn);
}
};
Sen kör du med den inbyggda std::sort för att sortera vectorn.
Sv: Sortering??
<code=c++>
typedef std::map<std::string, std::string> data_t;
data_t data;
// inläsning
data.insert(data_t::value_type(namn, adress));
...
// spara
for (data_t::iterator it = data.begin(); it != data.end(); ++it)
std::cout << "namn=" << it->first << " adress " << it->second << std::endl;
</code>Sv:Sortering??
Sv: Sortering??
<code=c++>
struct info1 {
CString namn;
...
};
vector<info1> data;
sort(data.begin(), data.end(), boost::bind(&info1::name, _1) < boost::bind(&info1::name, _2));
</code>Sv:Sortering??
Skulle ändå rekommendera dig att överväga det. En konvertering string -> CString är inget större arbeta vad jag kan minnas (något i stil med CString(s.c_str())?), och std::string är ju bra mycket mer trevligt eftersom alla vet hur de funkar, och eftersom du i princip kan porta alla delar som inte har att göra med konvertingen explicit. Om det skulle vara aktuellt att byta plattform alltså.Sv: Sortering??
någon som kan skriva ett fungerande exempel...(eller att helt exempel)
jag kanske inte har kunskapen att förstå era exempel???
vem vet...Sv:Sortering??
I princip så är det så att för att du ska kunna sortera något så måste du veta i vilken ordning de ska ligga. Sort förutsätter därför att objekt av typen definierar en <-funktion (kanske även några fler). Om du t.ex. har en vektor med heltal som du vill sortera, så finns < automatiskt (3<4, !(4<3)).
Så definiera bara något i stil med:
operator < (info1 x) {return namn < x.namn;}
så löser det sig nog.