以下に定義されているように、タイプ Foo のデータベースからオブジェクトを読み取っています。このオブジェクトは Foo メンバーのベクトルであり、Foo メンバーは文字列 ID とコンテナー オブジェクトで構成されます。
typedef std::pair<std::string, Container> FooMember;
typedef std::vector<FooMember> Foo;
id に関して並べ替えが行われる、並べ替えられた形式で Foo オブジェクトを反復処理したいと考えています。これを行うには、次の関数を使用して、最初にオブジェクトの並べ替えられたバージョンを作成します。ご覧のとおり、オブジェクトは大文字と小文字を区別しない方法で並べ替えられます。現在行っている方法と比較して、このオブジェクトを反復処理するためのより良い方法はありますか?
Foo sortedFoo(Foo& value) const {
Foo returnValue;
returnValue.reserve(value.size());
// use a map to sort the items
std::map<std::string, FooMember> sortedMembers;
{
Foo::iterator i = value.begin();
Foo::iterator end = value.end();
for(; i!=end; ++i) {
std::string name = i->first;
boost::algorithm::to_lower(name);
sortedMembers[name] = *i;
}
}
// convert the map to a vector of its values in sorted order
std::map<std::string, FooMember >::iterator i = sortedMembers.begin();
std::map<std::string, FooMember >::iterator end = sortedMembers.end();
for(; i!=end; ++i) {
returnValue.push_back(i->second);
}
return returnValue;
}