在SQL中有一个类似的功能
SELECT TOP 20 distance FROM dbFile ORDER BY distance ASC
Run Code Online (Sandbox Code Playgroud)
如果我的SQL是正确的,比如10,000条记录,这应该返回我的数据库中的20个最小距离.
我没有数据库.我有一个100,000元素的简单数组.
是否有C++容器,Boost,MFC或STL为结构提供简单的代码
struct closest{
int ID;
double distance;
closest():ID(-1), distance(std::numeric_limits<double>::max( )){}
};
Run Code Online (Sandbox Code Playgroud)
我可以在哪里建立一个按距离排序的容器
boost::container::XXXX<closest> top(20);
Run Code Online (Sandbox Code Playgroud)
然后有一个简单的
top.replace_if(closest(ID,Distance));
Run Code Online (Sandbox Code Playgroud)
如果容器将使用我的新条目替换当前最高距离的条目,如果它小于我容器中的当前最高距离.
我并不担心速度.我喜欢优雅干净的解决方案,其中容器和代码做所有的繁重.
编辑.收到所有重要答案后的附录.
由于它的优雅,我真的很想找到它.是一个可以使用容器大小限制创建的已排序容器.在我的情况下20.然后我可以推送或插入我心中的内容10万件或更多.但.总有一个但是.如果容器的比较器值不在最低的20个值内,则通过替换或不插入项目,容器将保持最大20的大小.
是.我现在从所有这些答案中知道,通过编程和调整现有容器,可以实现相同的效果.也许当C&C++标准委员会的下一轮建议出现时.我们可以建议.自我分类(我们已经有了)和自我限制容器.
在DOS的旧时代,有DPMI(DOS保护模式接口).除此之外,我允许你的程序能够打破640K的障碍.
在更现代的情况下,CPU具有EMT64(扩展内存64技术)i7s和12 gig ram,是否有相同的技术允许我在非64位操作系统上使用32位应用程序的额外内存.
程序员经常抱怨说,只要他们拥有更快/更多内存/更多核心机器,他们就会更快乐(他们从不会说更高效).
任何人都可以想到除了程序员工作站之外还有两个空闲的四核四核服务器可用的语言/协议系统.
我不能,因为大多数编译器/解释器通常按照说法进行单线程处理,并遵循编译/检查语法阶段,然后是链接/绑定序列.即使在现代IDE中,也不存在编译许多源文件的编译阶段的能力.