在多图中找到一个键的两个最大值
Find two biggest values for one key in a multimap
i具有一个由键组成的多映像,该密钥是一对ints,键的值是浮点数。现在我想拥有我所有键的两个最大值。
在我的示例中,密钥(1,1(应导致值5.8和3.7。
键(2,2(应导致2.4和1.5。
指出:我不知道密钥的数字和外观。所以我不知道键(2,2(是否存在。
这是代码:
int main(int argc, char** argv)
{
// Create some values - both vectors have the same size
// The pairs and the thetas may be unsorted
vector<pair<int, int>> pairs;
pairs.push_back(make_pair(1, 1));
pairs.push_back(make_pair(1, 1));
pairs.push_back(make_pair(1, 1));
pairs.push_back(make_pair(2, 2));
pairs.push_back(make_pair(2, 2));
pairs.push_back(make_pair(3, 3));
pairs.push_back(make_pair(3, 3));
pairs.push_back(make_pair(1, 1));
vector<float> theta;
theta.push_back(1.4);
theta.push_back(2.4);
theta.push_back(3.7);
theta.push_back(2.4);
theta.push_back(1.5);
theta.push_back(1.6);
theta.push_back(2.4);
theta.push_back(5.8);
multimap<pair<int, int>, float> similarities;
for (size_t i = 0; i < pairs.size(); i++) {
similarities.insert(make_pair(make_pair(pairs[i].first, pairs[i].second), theta[i]));
}
}
在我的具体情况下,我不知道我的多映射中定义了哪个密钥对。我也认为,也许Multimap不是正确的选择,但我不确定是什么更好的类型。
我试图保持theta的矢量格式,但很难跟踪相关对。
我希望我能正确:
auto range = similarities.equal_range(make_pair(1,1));
size_t found = 0; float highest, second_highest;
if (range.first != similarities.end() && range.first != range.second) {
++found;
highest = (*std::max_element(range.first++, range.second)).second;
if (range.first != range.second) {
++found;
second_highest =
(*std::max_element(range.first++, range.second, [&](auto a, auto b){ return a.second < b.second && b.second < highest; })).second;
}
}
if (found > 0)
std::cout << highest<< std::endl;
if (found > 1)
std::cout << second_highest << std::endl;
以上不会给您两次相同的值。
您在这里有一些选择。
- 保留现有的
multimap
,然后对值进行线性搜索以找到两个最大的。 - 改用
map<pair<int, int>, set<float, std::greater<float> > >
,然后在查找钥匙后立即访问前两个项目。 - 使用
map<pair<int, int>, vector<float> >
并将矢量对插入进行排序。当进行更多查找时,比插入更好。 - 在需要检索最高两个值时,请使用
map<pair<int, int>, vector<float> >
和partial_sort
。在做更多的插入件时,比查找更多。
相关文章:
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 查找不在标准中的第一个值::设置<int>最小-最大值
- 使用一个功能打印最大值和平均值
- C++ 从数组中删除一个最大值和零
- 使用数组将最后一个最大值更改为第一个最小值
- 在多图中找到一个键的两个最大值
- 给定一个整数数组和一个数k,计算长度为k的每个子数组的最大值
- rand()不起作用,给了我一个超出指定的最大值和最小值的数字
- Rand从一个最大值为75的数字(36)开始时是如何工作的
- 在C++中,我需要创建一个程序,该程序在输入某个数字时循环并停止,然后显示最大值和最小值
- 一个模板函数,用于获取向量中的最大值及其相应的索引
- 为什么我的c++算法总是为一个数字的最小值和最大值返回相同的值
- 我想找到一个2d数组C++中每一行的最大值
- C++函数在一个双精度数组中查找最大值
- 我正在尝试创建一个程序,该程序根据用户输入的最大值将随机数相乘
- 需要帮助编写一个函数来查找n维数组中的最大值和最小值
- 找到并返回比平衡树的q大的下一个最小值
- 斐波那契数列c++显示一个/最大值