用STL函数实现离散化c++
时间: 2023-11-12 22:07:12 浏览: 140
离散化是一种常见的处理数组中重复元素的方法,通过将原数组映射到一个连续的整数序列来实现。使用STL函数可以简化离散化的过程。
以下是用STL函数实现离散化的C++代码示例:
```c++
#include <cstdio>
#include <algorithm>
#include <map>
#define maxn 10039
using namespace std;
int n, a[maxn], b[maxn];
map<int, int> mp;
int main(){
scanf("%d", &n);
for(int i = 1; i < n; i++){
scanf("%d", &a[i]);
b[i = a[i]; //复制一份
}
sort(b + 1, b + n); //排序
int e = unique(b + 1, b + n) - b - 1; //去重并得到去重后的个数
for(int i = 1; i < n; i++){
a[i = lower_bound(b + 1, b + e + 1, a[i]) - b; //利用lower_bound在排好序的数组中找位置
}
for(int i = 1; i < n; i++){
printf("%d ", a[i]);
}
return 0;
}
```
在这个示例中,我们使用`std::sort`函数对副本数组`b`进行排序,然后使用`std::unique`函数去除重复元素,得到去重后的个数`e`。接下来,我们使用`std::lower_bound`函数在排好序的数组`b`中找到每个元素在离散化后的位置,并更新原数组`a`。最后,我们通过遍历原数组`a`打印出离散化后的结果。
请注意,这里使用了`std::map`来存储原数组中的每个值和它在离散化后的位置之间的映射关系,以便在需要查询原数组中的值对应的离散化后的位置时使用。
希望这个示例对你有帮助!
阅读全文