c++ - 如何找到 map 的中间元素?? STL

标签 c++ algorithm

您好,我在 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/

相关文章:

c++ - 这是 Windows 文件 API 的正确用法吗? (多个重叠请求)

c++ - 如何仅使用邻接表在无向图中找到存在的循环(顶点也没有)?

arrays - 组合 - 将数组中的人配对

c++ - 如何在cppyy中加载库?

C++ 数学问题和 5/4*pi 与 5*pi/4

c++ - 对非成员函数的 undefined reference - C++

c++ - 我的对象在 vector 中的地址发生变化

C++ map::find 或 map::iterator 哪个更有效 w.r.t 复杂性

sql - 使用 SQL Server 查找某个项目在给定期间搜索算法中是否可预订

algorithm - 找出比n中数字相同的最大数