Open4
C++のアレをRustでやりたいとき
最初一つの記事にしようと思ったが面倒になった.コツコツ追記していく所存.
コンテナ系
- C++
- Rust
C++ | Rust |
---|---|
std::vector<T> |
std::vec::Vec<T> |
std::array<T, N> |
[T; N] |
std::deque<T> |
std::collections::VecDeque<T> |
std::list<T> |
std::collections::LinkedList<T> |
std::unordered_map<T> |
std::collections::HashMap<T> |
std::map<T> |
std::collections::BTreeMap<T> |
std::unordered_set<T> |
std::collections::HashSet<T> |
std::set<T> |
std::collections::BTreeSet<T> |
std::priority_queue<T> |
std::collections::BinaryHeap<T> |
multi系(std::multiset
)は軒並みRustの標準ライブラリにはない.std::stack
とかstd::queue
は何となく代替できるか.
operator overloading
- C++
- Rust
例
#[derive(Debug, PartialOrd, PartialEq)]
struct Complex {
re: f64,
im: f64,
}
impl Complex {
fn new(re: f64, im: f64) -> Self {
Self { re, im }
}
}
impl std::ops::Add for Complex {
type Output = Self;
fn add(self, other: Self) -> Self {
Self {
re: self.re + other.re,
im: self.im + other.im,
}
}
}
fn main() {
let c1 = Complex::new(1.0, 2.0);
let c2 = Complex::new(3.0, -4.0);
assert_eq!(Complex::new(4.0, -2.0), c1 + c2);
}