我正在从 Foo 类型的数据库中读取一个对象,定义如下。该对象是 Foo 成员的向量,其中 Foo 成员由字符串 id 和容器对象组成。
typedef std::pair<std::string, Container> FooMember;
typedef std::vector<FooMember> Foo;
我希望以排序形式迭代 Foo 对象,其中排序是针对 id 完成的。为此,我使用以下函数首先创建对象的排序版本。如您所见,对象以不区分大小写的方式排序。与我目前的做法相比,我是否有更好的方法来迭代这个对象?
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;
}