gpt4 book ai didi

c++ - 按排序顺序迭代 std::vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:32 26 4
gpt4 key购买 nike

<分区>

我从 API 收到一个 Foo vector ,如下所示:

std::vector<Foo> foos;

然后我写了一个函数叫做

std::vector<std::string> getKeys(const std::vector<Foo>&)

它遍历容器并为每个 Foo 对象提取一个 std::string 类型的键。

您将如何按排序顺序遍历 foo 中的 Foo 对象,其中排序是在键上以不区分大小写的方式进行的。此外,我不想制作 foos 的排序拷贝,因为它很大。

这是我的尝试,效果不错,但我想知道是否可以做得更好。

struct CaseInsensitiveComparitor {
bool operator ()(const std::pair<std::string, Foo&> lhs, const std::pair<std::string, Foo&> rhs) const {
std::string str1 = lhs.first;
boost::algorithm::to_lower(str1);
std::string str2 = rhs.first;
boost::algorithm::to_lower(str2);
return (str1 < str2);
}
};

// map key to Foo
std::vector<std::pair<std::string, Foo*> > tempFoos;
{
std::vector<std::string> keys = getKeys(foos);
std::vector<std::string>::iterator begin = keys.begin();
std::vector<std::string>::iterator i = keys.begin();
std::vector<std::string>::iterator end = keys.end();
for(;i!=end;++i)
{
tempFoos.push_back(*i, &foos[distance(begin,i)]);
}

std::sort(tempFoos.begin(), tempFoos.end(), CaseInsensitiveComparitor());
}

std::vector<Foo*> sortedFoos;
std::vector<std::pair<std::string, Foo*> >::iterator i = tempFoos.begin();
std::vector<std::pair<std::string, Foo*> >::iterator end = tempFoos.end();
for(;i!=end;++i)
{
sortedFoos.push_back(i->second);
}

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com