C++ 如何将整数数组划分为N个分区?

C++ 如何将整数数组划分为N个分区?,c++,C++,例如,我有array1={1,2,3,4}并希望将其划分为2个子阵列,因此: 子阵列1={1,2}和子阵列2={3,4} 是否有一种方法可以根据N的用户输入对其进行分区并自动创建阵列 (作为背景,我将使用一个包含100000个整数值的数组,对其进行排序并对其进行分区,以便更高效地查找数组中的数字。由于对其进行了排序和分区,我可以知道每个数组的起始和结束范围,只需在那里进行搜索即可)你问错了问题。如果要查找数组中是否存在该数字,最简单和最快的方法是使用std::unordered\u set,搜索

例如,我有array1={1,2,3,4}并希望将其划分为2个子阵列,因此:

子阵列1={1,2}和子阵列2={3,4}

是否有一种方法可以根据N的用户输入对其进行分区并自动创建阵列


(作为背景,我将使用一个包含100000个整数值的数组,对其进行排序并对其进行分区,以便更高效地查找数组中的数字。由于对其进行了排序和分区,我可以知道每个数组的起始和结束范围,只需在那里进行搜索即可)

你问错了问题。如果要查找数组中是否存在该数字,最简单和最快的方法是使用
std::unordered\u set
,搜索将变成一个固定时间操作。

“取决于用户输入的N”当然有一种方法。N代表什么?如果你有
inta[]={1,2,3,4}
,你可以像
int*b=a这样索引子数组
int*c=a+2但是可能有一个STL容器已经完成了您想要的任务,没有复杂的指针算法。或者可能会派上用场。为什么不使用二进制搜索呢?其目的是在排序数组中高效搜索。我认为OP是在重新发明二进制搜索OK,所以允许复制。您可以使用或进行快速访问。STL
std::set
中的搜索是O(logn)复杂度
std::unordered_set
是常数时间。如果起点是一个数组,将其复制到一个集合中只是为了能够
find()
一个数字是浪费时间和内存的。不需要复制任何东西<代码>标准::二进制搜索将完成此任务。复制到标准集是O(n log n),不是线性的,搜索是对数的,不是常数。可以在线性时间内从排序数组构造BST,但我认为
std::set
不支持这一点。