mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
tsort: Switch to BTreeHash and BTreeSet
Using HashMap and HashSet give a valid topological sort, but the output will change randomly at each run. BTree based structures will guarantee that the output is always ordered in the same way. This also makes the ouptut similar to the output of the C version of the tools, on which some applications rely.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
// * For the full copyright and license information, please view the LICENSE
|
||||
// * file that was distributed with this source code.
|
||||
use clap::{crate_version, Arg, Command};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use std::fs::File;
|
||||
use std::io::{stdin, BufRead, BufReader, Read};
|
||||
use std::path::Path;
|
||||
@@ -103,8 +103,8 @@ pub fn uu_app() -> Command {
|
||||
// but using integer may improve performance.
|
||||
#[derive(Default)]
|
||||
struct Graph {
|
||||
in_edges: HashMap<String, HashSet<String>>,
|
||||
out_edges: HashMap<String, Vec<String>>,
|
||||
in_edges: BTreeMap<String, BTreeSet<String>>,
|
||||
out_edges: BTreeMap<String, Vec<String>>,
|
||||
result: Vec<String>,
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ impl Graph {
|
||||
}
|
||||
|
||||
fn init_node(&mut self, n: &str) {
|
||||
self.in_edges.insert(n.to_string(), HashSet::new());
|
||||
self.in_edges.insert(n.to_string(), BTreeSet::new());
|
||||
self.out_edges.insert(n.to_string(), vec![]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user