【问题标题】:c++ Sorting a vector based on values of other vector, or what's faster?c ++根据其他向量的值对向量进行排序,还是更快?
【发布时间】:2010-06-02 22:10:48
【问题描述】:

还有其他几篇关于根据另一个向量 B 中的值对向量 A 进行排序的文章。大多数其他答案告诉创建一个结构或一个类来将这些值组合到一个对象中并使用 std::sort。

虽然我对此类解决方案的性能很好奇,因为我需要优化实现冒泡排序的代码来对这两个向量进行排序。我正在考虑使用vector<pair<int,int>> 并对其进行排序。

我正在开发一个 blob 跟踪应用程序(图像分析),我尝试将以前跟踪的 blob 与视频帧中新检测到的 blob 进行匹配,在其中我检查每个帧与几个以前跟踪的帧,当然还有我在之前的帧中发现的斑点。我以每秒 60 次的速度执行此操作(我的网络摄像头的速度)。

感谢任何有关优化此问题的建议。我正在尝试优化的代码可以在这里显示:

http://code.google.com/p/projectknave/source/browse/trunk/knaveAddons/ofxBlobTracker/ofCvBlobTracker.cpp?spec=svn313&r=313

重要提示:我忘了提到向量的大小永远不会大于 5,而且其中大多数只有 3 个项目并且将是未排序的(也许我什至可以将其硬编码为 3 个项目?)

谢谢

【问题讨论】:

  • "优化实现冒泡排序的代码" ...为什么不将其优化为快速排序呢?
  • 嘘,谢谢!我对解决方案没有偏见,但很好奇这样做的好方法是什么
  • 或任何其他类型的排序,假设向量尚未排序
  • 这么小的数据集要排序,看shell排序。

标签: c++ performance sorting vector std-pair


【解决方案1】:

C++ 提供了许多排序选项,从std::sort 算法到排序容器,如std::mapstd::set。您应该始终尝试将这些作为您的第一个解决方案,并且仅在最后的手段中尝试“优化冒泡排序”之类的方法。

【讨论】:

    【解决方案2】:

    我不久前实现了这一点。另外,我认为您的意思是订购向量 B 的方式与 A 的排序值。

    Index 包含data 的排序顺序。

    /** Sorts a vector and returns index of the sorted values
     * \param Index Contains the index of sorted values in the original vector
     * \param data The vector to be sorted
     */
    template<class T>
    void paired_sort(vector<unsigned int> & Index, const vector<T> & data)
    {
        // A vector of a pair which will contain the sorted value and its index in the original array
        vector<pair<T,unsigned int>> IndexedPair;
        IndexedPair.resize(data.size());
        for(unsigned int i=0;i<IndexedPair.size();++i)
        {
            IndexedPair[i].first = data[i];
            IndexedPair[i].second = i;
        }
        sort(IndexedPair.begin(),IndexedPair.end());
        Index.resize(data.size());
        for(size_t i = 0; i < Index.size(); ++i) Index[i] = IndexedPair[i].second;
    }
    

    【讨论】:

    • 是的,这有点我的意思,但我也在寻找这种事情的最佳解决方案;所以实际上我并不拘泥于这两个向量;对于这种情况,只要速度快,任何解决方案都可以。谢谢!
    • @Jacob:我不喜欢复制每个T,因为这可能很慢,并且在不可复制的对象上无法使用。为什么不使用T*
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 2012-07-05
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多