如何排序包含自定义(即用户定义)对象的向量.
可能应该使用标准STL算法与谓词(函数或函数对象)一起排序,该谓词将在自定义对象中的一个字段(作为排序键)上操作.
我是在正确的轨道上吗?
在我订阅的邮件列表中,两位相当知识渊博的(IMO)程序员正在讨论一些优化的代码,并说出以下内容:
在5 - 8年前发布的CPU上,向后循环迭代(例如
for (int i=x-1; i>=0; i--) {...})稍微快一些,因为与i零比较比将其与其他数字相比更有效.但是对于非常近期的CPU(例如,从2008年到2009年),推测性加载器逻辑使得如果for循环向前迭代(例如for (int i=0; i< x; i++) {...})它更好地工作.
我的问题是,这是真的吗?最近是否更改了CPU实现,这样前向循环迭代现在比后向迭代有优势?如果是这样,那有什么解释呢?即改变了什么?
(是的,我知道,过早的优化是所有邪恶的根源,在考虑微优化之前检查我的算法等等...大多数我只是好奇)
我有一个班级A和一个<比较器.我怎样才能用它们来排序的数组A中的降序顺序?
class A {
...
};
class LessA {
bool operator()(const A& a1, const A& a2) const {
...
}
}
vector<A> v;
sort(v.begin(), v.end(), ???);
Run Code Online (Sandbox Code Playgroud)
我想我应该用???基于的东西替换LessA,但我无法弄清楚应该在那里进行什么.我想过使用lambda函数,但我一直在寻找更短的东西.
我std::map用来存储很多元素(元素对),我有一点"怀疑".更重要的是有效地遍历我所有的元素std::map,iterator或reverse_iterator?
对反向排序容器的推荐方法(例如:按降序排序向量)似乎是:
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
我理解第三个参数是一个函数或函数,它帮助sort()进行比较,而std :: greater是一个模板函子,但我不明白这里发生了什么.我的C++非常生疏,如果这些都是愚蠢的问题,请耐心等待:为什么那之后std::greater<int>有括号?我们std::greater在这里创建一个新对象吗?在这种情况下,为什么我们不需要new这里的关键字?
我有一个std::vector对象,我重载了<运算符.
我如何使用std::sort降序排序(无需编写我自己的Comparator)?
在我的程序中,它以升序打印数组,但我正在尝试对其进行修改,以便以降序打印。可以使用一些帮助。
#include <iostream>
#include <algorithm>
int main()
{
const int length = 5;
int array[length] = {35, 67, 75, 60, 11};
std::sort(std::begin(array), std::end(array));
for(int i = 0; i < length; i++)
{
std::cout << array[i] << ' ';
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为HPC_user的类,并尝试按降序排列HPC_user的向量,其中一个成员变量为活动.似乎std :: sort应该用第三个参数完成工作.所以我遵循这个线程并定义了一个更大的新结构.
struct cpuComp
{
bool operator()(HPC_user const & a, HPC_user const & b)
{
return a.get_activity() > b.get_activity();
}
};
int main()
{
// do something;
std::vector<HPC_user> users = db2class(ins, days);
std::sort(users[0], users[len], cpuComp());
//.....
}
Run Code Online (Sandbox Code Playgroud)
当我编译代码时,我遇到了一些错误:
In file included from db2class.cpp:3:
In file included from /usr/include/c++/4.2.1/iostream:44:
In file included from /usr/include/c++/4.2.1/ostream:44:
In file included from /usr/include/c++/4.2.1/ios:44:
In file included from /usr/include/c++/4.2.1/bits/char_traits.h:45:
In file included from /usr/include/c++/4.2.1/bits/stl_algobase.h:74:
/usr/include/c++/4.2.1/bits/stl_iterator_base_types.h:128:35: error: no type named 'iterator_category' in 'HPC_user'
typedef typename …Run Code Online (Sandbox Code Playgroud) c++ ×8
sorting ×5
stl ×4
c++11 ×2
std ×2
arrays ×1
bubble-sort ×1
c ×1
class ×1
comparator ×1
for-loop ×1
optimization ×1
performance ×1
stdmap ×1
vector ×1