Objective c 如何知道NSMutable数组中最小15个对象的索引,并将这些索引存储在另一个数组中
如何知道NSMutable数组中最小15个对象的索引,并将这些索引存储在另一个数组中Objective c 如何知道NSMutable数组中最小15个对象的索引,并将这些索引存储在另一个数组中,objective-c,algorithm,for-loop,nsmutablearray,Objective C,Algorithm,For Loop,Nsmutablearray,如何知道NSMutable数组中最小15个对象的索引,并将这些索引存储在另一个数组中 我正在用objective-c编写程序,我尝试使用for循环,但还没有找到合适的算法 最简单的方法是对数组排序并选择前15个元素 一种更有效的方法是将它们推送到一个上限为15个元素的二进制堆中。数组中的前15个元素直接进入堆。如果堆中最大的元素小于它,则每个后续元素都会替换它 CoreFoundation提供了一个可用于此目的的ID,尽管您可以将ID作为void*s进行输入和输出。还有一个,我对它一无所知,只知
我正在用objective-c编写程序,我尝试使用for循环,但还没有找到合适的算法 最简单的方法是对数组排序并选择前15个元素 一种更有效的方法是将它们推送到一个上限为15个元素的二进制堆中。数组中的前15个元素直接进入堆。如果堆中最大的元素小于它,则每个后续元素都会替换它 CoreFoundation提供了一个可用于此目的的ID,尽管您可以将ID作为void*s进行输入和输出。还有一个,我对它一无所知,只知道它存在并声称实现了一个二进制堆 我的首选是使用C++的std::priority_队列,它经过了彻底的测试,只需稍加哄骗就能很好地处理ID
auto lt = [](id a, id b) { return (whatever means "a < b" to you); };
std::priority_queue<id, std::vector<id>, decltype(lt)> pq{lt};
for (id e in myarray) {
if (pq.size() == 15 && lt(e, pq.top()))
pq.pop();
if (pq.size() < 15)
pq.push(e);
}
NSMutableArray * top15 = [NSMutableArray arrayWithCapacity:15];
while (!pq.empty()) {
[top15 addObject:pq.top()];
pq.pop();
}
要使用此代码,必须将相关的.m文件重命名为.mm。对数组进行排序,索引0…14将对应最小的15个对象。具体问题是什么。遍历数组并存储最小15个值的索引,例如,在15个元素的有序数组中。