c++中,如何为比较器传入除了要比较的数值以外的其他值
时间: 2024-02-20 15:02:16 浏览: 18
C++ 中可以使用函数对象(function object)来实现比较器,函数对象是一个类,其对象可以像函数一样被调用。在函数对象中,我们可以定义内部状态,这些状态可以在比较过程中使用。
例如,在一个比较器中,我们需要按照元素的值以及它们在原数组中的下标来进行比较。我们可以定义一个函数对象类,该类包含一个成员变量用于存储原数组的下标,然后在比较过程中使用这个下标。
示例代码如下:
```c++
struct Compare {
vector<int>& nums;
Compare(vector<int>& nums) : nums(nums) {}
bool operator()(int i, int j) {
if (nums[i] == nums[j]) {
return i < j; // 如果值相等,则比较下标
}
return nums[i] < nums[j]; // 比较值
}
};
int main() {
vector<int> nums = {3, 1, 4, 1, 5, 9};
set<int, Compare> s(Compare(nums));
for (int i = 0; i < nums.size(); ++i) {
s.insert(i);
}
for (int i : s) {
cout << nums[i] << " ";
}
return 0;
}
```
在上面的例子中,我们使用 `set` 容器来存储元素的下标,然后通过自定义的比较器类 `Compare` 来对这些下标进行比较。`Compare` 类中包含一个成员变量 `nums`,用于存储原数组,然后在比较过程中通过这个变量来获取元素的值。在 `operator()` 中,我们先比较元素的值,如果相等则比较它们在原数组中的下标。在 `main` 函数中,我们将 `Compare` 对象传递给 `set` 容器,然后将元素的下标插入到 `set` 中。最后,我们按照从小到大的顺序输出元素的值。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)