1

我有一个hashbrown::HashSet,我正在尝试使用 Rayon's par_iter,但我无法找出正确的语法。

货运.toml

[package]
name = "basic"
version = "0.1.0"
authors = ["Me <me@example.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

hashbrown = "0.9.1"
rayon = "1.5.0"

src/main.rs

use hashbrown::*;
use rayon::prelude::*;
// use hashbrown::hash_set::rayon::*;

fn main() {
    println!("Hello, world!");

    let hs = HashSet::new();
    for n in 1..100 {
        hs.insert(n);
    }

    hs.par_iter().for_each(|n| println!("n={}", n));
}

这无法编译。

error[E0599]: no method named `par_iter` found for struct `hashbrown::HashSet<{integer}>` in the current scope
   --> src/main.rs:13:8
    |
13  |     hs.par_iter().for_each(|n| println!("n={}", n));
    |        ^^^^^^^^ method not found in `hashbrown::HashSet<{integer}>`
    | 
   ::: /Users/me/.cargo/registry/src/github.com-1ecc6299db9ec823/hashbrown-0.9.1/src/set.rs:114:1
    |
114 | pub struct HashSet<T, S = DefaultHashBuilder> {
    | --------------------------------------------- doesn't satisfy `_: rayon::iter::IntoParallelRefIterator`
    |
    = note: the method `par_iter` exists but the following trait bounds were not satisfied:
            `&hashbrown::HashSet<{integer}>: IntoParallelIterator`
            which is required by `hashbrown::HashSet<{integer}>: rayon::iter::IntoParallelRefIterator`

warning: unused import: `rayon::prelude`
 --> src/main.rs:2:5
  |
2 | use rayon::prelude::*;
  |     ^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

hashset -rayon 文档建议hashbrown::hash_set::rayon具有与 Rayon 相关的数据类型,我知道有时我需要使用特征来使功能可用。但是,如果我取消注释导入,它甚至找不到模块:

error[E0432]: unresolved import `hashbrown::hash_set::rayon`
 --> src/main.rs:3:26
  |
3 | use hashbrown::hash_set::rayon::*;
  |                          ^^^^^ could not find `rayon` in `hash_set`

我在 Mac 上运行 Rust 1.49.0:

$ rustup show
Default host: x86_64-apple-darwin
rustup home:  /Users/tda0106/.rustup

installed toolchains
--------------------

stable-x86_64-apple-darwin (default)
nightly-x86_64-apple-darwin

active toolchain
----------------

stable-x86_64-apple-darwin (default)
rustc 1.49.0 (e1884a8e3 2020-12-29)

问题是什么?

编辑

正如策展人@E_net4 在评论中指出的那样,人造丝支持是一项功能。将依赖项更改为

[dependencies]
hashbrown = { version = "0.9.1", features = ["rayon"] }
rayon = "1.5.0"

无需额外的 use 语句即可完成这项工作。

我不清楚文档在哪里表明了这一点。

4

1 回答 1

1

如果您查看hashbrowncrate内部,您将看到仅在启用该功能rayon时才提供支持。rayon您可以在您的Cargo.toml

[dependencies]
hashbrown = { version = "0.9.1", features = ["rayon"] }
于 2021-02-05T20:15:52.680 回答