Ich habe eine Klasse, die ich verwenden, um meine Zeichenfolge, bool Paar Vektor zu sortieren. Meine Strings sind utf-8-codiert. Ich mag sie sortieren, so dass, wenn die Gebietsschema der Person zum Beispiel festgelegt, Französisch, würde ich das hoffen, wenn der Benutzer getippt:Hilfe mit der Verwendung von std :: locale?
zap
apple
école
blue
erable
Dass es wäre zu klären zu sein:
apple
blue
école
erable
zap
Meine std :: locale Klasse ist dies:
class AguiLBLocaleCompare :
public std::binary_function<std::pair<std::string, bool>,
std::pair<std::string,bool>, bool> {
protected:
const std::collate<char> &coll;
public:
AguiLBLocaleCompare(std::locale loc)
: coll(std::use_facet<std::collate<char> >(loc)) {}
bool operator()(const std::pair<std::string, bool> &a,
const std::pair<std::string, bool> &b) const {
// std::collate::compare() takes C-style string (begin, end)s and
// returns values like strcmp or strcoll. Compare to 0 for results
// expected for a less<>-style comparator.
return coll.compare(a.first.c_str(), a.first.c_str() + a.first.size(),
b.first.c_str(), b.first.c_str() + b.first.size()) < 0;
}
};
und dann Methode mein Artikel Sortierung ist:
void AguiListBox::sort()
{
if(!isReverseSorted())
std::sort(items.begin(),items.end(),AguiLBLocaleCompare(WHAT_DO_I_PUT_HERE));
else
std::sort(items.rbegin(),items.rend(),AguiLBLocaleCompare(WHAT_DO_I_PUT_HERE));
}
Also ich bin mir nicht sicher, was ich in den Konstruktor setzen soll, um den gewünschten Effekt zu erzielen.
Ich versuchte std::locale()
, aber es sortiert die Akzente nach dem Z in Zap, die nicht was ich will.
Artikel ist ein
std::vector<std::pair<std::string, bool>>
Dank
Auf welcher Plattform befinden Sie sich? C++ - Gebietsschemaunterstützung ist notorisch lückenhaft. –
Ich bin auf Windows 7 – jmasterx
Syntaktisch können Sie jedes Gebietsschema dort, z. 'std :: locale :: locale (" fr_FR.utf8 ")' aber ich habe keine Ahnung, welche Länder Windows zur Verfügung hat oder was ihre C++ Locale-Namen sind. –