#queue #fifo-queue #privacy #sorting #structure #better

bin+lib queued_rust

更简单实现的队列类型,用于更好的隐私管理和数据组织

9 个不稳定版本 (3 个破坏性更新)

0.7.4 2024 年 4 月 28 日
0.7.3 2024 年 4 月 28 日
0.6.1 2024 年 4 月 28 日
0.5.3 2024 年 4 月 26 日
0.1.1 2024 年 4 月 22 日

484数据结构

Download history 580/week @ 2024-04-21 564/week @ 2024-04-28 19/week @ 2024-05-05 14/week @ 2024-05-19 1/week @ 2024-05-26 5/week @ 2024-06-02 8/week @ 2024-06-09 1/week @ 2024-06-16 65/week @ 2024-07-28

每月下载 65
用于 scheduled

MIT 许可证

18KB
332

Queued Rust 包文档

简介

欢迎使用 Queued Rust 文档,这是一个为 Rust 项目提供队列数据结构的包。此包提供了标准队列和排序队列的高效实现。

特性

所有队列实现了一个最大尺寸特性,以便更好地限制它们。队列有一个反向字段,因此您可以通过切换队列的顺序。因此,您可以将其从 FIFO 队列转换为 FOFI 队列。并将优先级队列转换为最低优先级队列。

  • 队列:一个基本的 FIFO(先进先出)队列。
  • SortedQueue:一个维护元素排序顺序的队列。
  • Weighted:一个包装类型,可以将排序添加到任何对象。

此外,还有一些辅助函数可以帮助执行常见的任务,例如合并队列和将它们转换为不同的形式。

类型

队列

一个基本的 FIFO(先进先出)队列。

示例

use queued_rust::{Queue};

fn main() {
    // Creating a regular queue
    println!("Testing Out Queues\n");
    let mut queue = Queue::new(false);

    // Add items to the regular queue
    queue.add(4);
    queue.add(1);
    queue.add(3);
    queue.add(5);
    queue.add(2);

    // Two methods for iterating (.next and .iter)
    println!("Printing items from regular queue");
    // Notice how the items are printed in order of add 4, 1, 3, 5, 2
    while let Some(item) = queue.next() {
        println!("Remaining: {} Item: {}", queue.len(), item);
    }

}

SortedQueue

一个维护元素排序顺序的队列。元素必须实现排序特性。

示例

use queued_rust::{SortedQueue};

fn main() {
    // Creating a sorted queue
    println!("\n\nTesting Out Sorted Queues\n");
    let mut sorted_queue = SortedQueue::new(true);

    // Add items to the sorted queue
    sorted_queue.add(4);
    sorted_queue.add(1);
    sorted_queue.add(3);
    sorted_queue.add(5);
    sorted_queue.add(2);

    // Notice how the items are printed in order 1, 2, 3, 4, 5
    println!("Printing items from sorted queue");
    while let Some(item) = sorted_queue.next() {
        println!("Remaining: {} Item: {}", sorted_queue.len(), item);
    }
}

Weighted

一个简单的包装类型,允许您将一个权重数字附加到任何项目旁边,以便轻松使用排序类型,因为它需要该类型实现排序特性

示例

use queued_rust::{SortedQueue, Weighted};

fn main() {
    // Creating a sorted queue with weights
    println!("\n\nTesting Out Sorted Weighted Queues\n");
    let mut sorted_weighted_queue = SortedQueue::new(false);

    // Add items to the sorted queue
    sorted_weighted_queue.add(Weighted::new("hello", 10));
    sorted_weighted_queue.add(Weighted::new("this queue", 4523));
    sorted_weighted_queue.add(Weighted::new("is harder to order", 12412));
    sorted_weighted_queue.add(Weighted::new("properly", 14));
    sorted_weighted_queue.add(Weighted::new("so it might be better", 214));
    sorted_weighted_queue.add(Weighted::new("to add a weight system", 41444));


    println!("Printing items from sorted queue");
    while let Some(item) = sorted_weighted_queue.next() {
        println!("Remaining: {} Item: {}", sorted_weighted_queue.len(), item.into_item());
    }
}

有尺寸队列

这是一个可以添加到任何队列的约束,强制其成为特定大小。构造有尺寸队列意味着使用 new_sized 方法创建有尺寸队列对象。现在,因为添加项目到队列可能会引发错误,所以在使用有尺寸队列时使用 try_add 方法是最佳实践。

如果它未能插入项目,它将返回 QueueError::Full。

use queued_rust::{Queue};

fn main() {
    // Creating a sized queue
    println!("\n\nTesting Out Sized Queues\n");
    let mut sized_queue = Queue::new_sized(2, true); // Queue with max size of two items

    // These two will work good
    if let Err(error) = sized_queue.try_add(1) {
        eprintln!("{}", error);
    }
    if let Err(error) = sized_queue.try_add(2) {
        eprintln!("{}", error);
    }

    // This will fail
    if let Err(error) = sized_queue.try_add(3) {
        eprintln!("{}", error);
    }

    println!("Printing items from sized queue");
    for item in sized_queue {
        println!("{}", item);
    }
}

未来计划

  • 创建队列负载均衡器
  • 允许队列与通道的接口

依赖关系

~280–740KB
~17K SLoC