您好,我在 STL 库/C++ 中的 Map 概念之间徘徊。
int arr[] = {10,15,14,13,17,15,16,12,18,10,29,24,35,36};
int n = sizeof arr / sizeof *arr;
map<int, bool> bst;
map<int, bool>::iterator it;
vector<int> median_output;
const int k = 5;
for (int i = 0; i < k; ++i) {
bst.insert(make_pair(arr[i], true));
}
for (it = bst.begin(); it != bst.end(); it++) {
cout << (*it).first << " ";
}
现在当我打印这张 map 时,它是按排序顺序打印的。现在有什么最简单的方法可以找到这张 map 的中间点..... 需要找到更大问题的中位数...所以尝试实现平衡二叉搜索树..
最佳答案
map
是一棵平衡搜索树。要找到它的中间位置 - 找到它的大小,然后从 begin()
迭代到它的一半大小 - 这将是中间位置。像这样:
for (it = bst.begin(), int middle = 0; middle < bst.size()/2; it++, middle++) {
cout << (*it).first << " ";
}
// now after the loop it is the median.
如果您使用 map
对事物进行排序 - 恕我直言,那就太过分了。您可以使用数组(或 vector
)更有效地做到这一点,然后找到中间点也将是微不足道的。 map
用于按键访问数据,而不仅仅是排序。
关于c++ - 如何找到 map 的中间元素?? STL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303269/