📜  consord (1)

📅  最后修改于: 2023-12-03 15:14:14.750000             🧑  作者: Mango

ConSord

ConSord是一个基于C++11的头文件库,用于优化容器的各种细节,以提高代码质量和性能。它由TheLartians团队维护,并在MIT许可证下开源。

特性
  • 高效的容器流程控制
  • 高度可定制的排序算法
  • 高速排序算法(会使用timsortintrosort,或快速排序算法中的一种)
  • 在序列中查找元素的二进制搜索
  • 并行化排序和查找算法
  • 支持任何支持随机访问迭代器的容器
安装

可以使用ConanCMake进行安装。只需添加以下命令:

include(FetchContent)
FetchContent_Declare(
  consord
  GIT_REPOSITORY https://github.com/TheLartians/ConSord.git
  GIT_TAG        v1.0.0
)
FetchContent_MakeAvailable(consord)
使用

使用ConSord的方法非常简单,只需使用ConSord头文件即可。以下示例展示了如何在向量中使用Introsort:

#include <vector>
#include <iostream>
#include <algorithm>
#include "consord/consord.h"

int main()
{
    std::vector<int> v {3,1,4,1,5,9,2,6,5};
    consord::introsort(v.begin(), v.end());
    
    for (int i : v) 
        std::cout << i << ' '; // 输出:1 1 2 3 4 5 5 6 9
}
排序算法

ConSord支持三种类型的排序算法:

  1. Timsort:此算法在大多数情况下为O(n log n),最坏情况下为O(n log n)。

  2. Introsort:在大多数情况下,这种方法是“arms length”快速排序,最坏情况下是O(n log n)的。

  3. 快速排序:ConSord通过使用Median-of-Three(MOT)快速排序算法,通过排除了递归堆栈的使用,使最坏情况下的快速排序最小化。

以下是选择排序算法的示例:

#include <vector>
#include <consord/consord.h>

int main()
{
    std::vector<int> v {3,1,4,1,5,9,2,6,5};
    consord::sort(v.begin(), v.end(), consord::SelectionSort{});
    // consord::sort(v.begin(), v.end(), consord::InsertionSort{});  // 插入排序
    // consord::sort(v.begin(), v.end(), consord::BubbleSort{});  // 冒泡排序
    
    for (int i : v) 
        std::cout << i << ' '; // 输出:1 1 2 3 4 5 5 6 9
}
查找算法

ConSord还提供了一个二进制搜索算法,可以用于具有随机存取迭代器的容器中,其效率为O(log n)。以下是查找示例:

#include <vector>
#include <consord/consord.h>

int main()
{
    std::vector<int> v {1,2,3,4,5,6,7,8,9};
    auto result = consord::binary_search(v.begin(), v.end(), 3);
    
    if (result != v.end())
        std::cout << "Found " << *result << '\n';  // 输出:Found 3
    else
        std::cout << "Not Found" << '\n';
}
并行化

ConSord还支持将排序和查找算法并行化。用户可以设置consord::ExecutionPolicy以使用线程池或std::execution策略。以下是并行化示例:

#include <vector>
#include <consord/consord.h>

int main()
{
    std::vector<int> v {3,1,4,1,5,9,2,6,5};
    consord::parallel_sort(std::execution::par, v.begin(), v.end());
    
    for (int i : v) 
        std::cout << i << ' '; // 输出:1 1 2 3 4 5 5 6 9
}
Conclusion

ConSord是一个强大的头文件库,提供了优化容器的各种细节,以提高性能和质量。它支持三种排序算法,二进制搜索算法和并行化排序和查找。

如果您正在寻找一个轻量级且易于使用的库,可用于构建高效的容器应用程序,则ConSord是一个非常不错的选择!