Kód:
// testy.cpp : main project file.
#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <sstream>
#include <vector>
#include <wchar.h>
using namespace std;
using namespace System;
// nejaký záznam:
struct sRecord {
int iNum;
wstring sStr;
};
typedef vector < sRecord > vList;
//bool compareLower( wchar_t, wchar_t );
// sortovanie podľa abecedy (niekde z netu, ide to aj bez lokálnych):
struct s_abcd {
bool operator ()( sRecord const& a, sRecord const& b ) const {
wstring wsa( a.sStr.length(), L' '); // Make room for charers
copy( a.sStr.begin(), a.sStr.end(), wsa.begin());
wstring wsb( b.sStr.length(), L' '); // Make room for charers
copy( b.sStr.begin(), b.sStr.end(), wsb.begin());
bool cmp = lexicographical_compare( wsb.begin(), wsb.end(),
wsa.begin(), wsa.end()/*,
compareLower*/ );
return ! cmp;
};
};
wstring IntToWStr( int );
int main( array < System::String ^ > ^ args ) {
vList * v = new vList;
// naplnenie:
for ( unsigned short int i = 900; i > 0; i -= 100 ) {
sRecord sRec = { i, IntToWStr( i ) }; // sACTRecord * sACTRec = new sACTRecord;
v->push_back( sRec );
}
wcout << v->at( 5 ).sStr << endl; //400
//v->at( 5 ).sStr = L"300"; // <================= toto mi spôsobuje pád
wcout << v->at( 5 ).sStr << endl; //400 => 300
sort( v->begin(), v->end(), s_abcd() );
return 0;
}
wstring IntToWStr( int n ) {
wostringstream result;
result << n;
return result.str();
}
Ak nezmením údaje sort zbehne. Ak odkomentujem označený riadok, budú 2 záznamy s reťazcom "300" tak to padá na "operátor<".
Nevie niekto pomôcť?
Win 7 Pro 64, MS VS 2008 - MS .NET Framework 3.5 SP1
// Spojený príspevok Pon 21.07.14 16:43vyriešené (nie celkom pekne), lock pls