【发布时间】:2012-09-23 02:35:27
【问题描述】:
我正在尝试实现一个简单的比较器,用于根据数组“_vec”中的值对索引进行排序。我收到“无效的
class Compare{
vector<int>& _vec;
public:
Compare(vector<int>& vec) : _vec(vec) {}
bool operator()(size_t i, size_t j){
if(_vec[i] != _vec[j])
return _vec[i] < _vec[j];
else
return (double)rand()/RAND_MAX < 0.5;
}
};
我正在使用以下函数调用:
sort(inds.begin(),inds.end(),Compare(vals));
其中 inds 只是一个包含从 1 到 15(比如说)的索引的数组,而 vals 是长度为 15 的数组,其中包含一些我想要计算其排序索引的值。总体目标是在 vals 中的两个(或更多)条目相等时随机化排序顺序。有什么帮助吗?
【问题讨论】:
-
您应该使用尾随下划线(或其他东西来区分这些)instead of leading underscores。
-
@Brian:因为这些不是文件范围,并且下划线后面没有大写字符,所以只要不保留它们就可以了。尽管如此,这个领域还是会引起足够的混乱,以至于另一种命名约定可能会让一些人更开心。
-
请注意 - 如果
vals的长度为 15,那么inds最好包含 [0..14] 范围内的索引,而不是 [1..15]。 -
C++98 标准说:§17.4.3.1.2 全局名称 [lib.global.names] 某些名称和函数签名集总是保留给实现: - 每个包含双下划线 (
__) 或以下划线开头后跟大写字母 (2.11) 的名称都保留给实现以供任何使用。 — 每个以下划线开头的名称都保留给实现用作全局命名空间中的名称。 最后一个项目符号后的脚注 165 说 此类名称也保留在命名空间 ::std (17.4 .3.1)。 我认为规则没有改变。
标签: c++ sorting operator-keyword assertion