cuốn sách gpt4 ai đã làm

Cách lặp lại trên một vector bản đồ bản đồ bản đồ bản đồ bản đồ bản đồ vector

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 14:57:14 27 4
mua khóa gpt4 Nike

Tôi đang cố gắng thu thập tất cả dữ liệu từ bản đồ bản đồ mà không cần phải thực hiện trong C++ Có 7 vòng.

Dữ liệu như sau:

Bản đồ 1=>Bản đồ 1.1=>Bản đồ 1.1.1=>Bản đồ 1.1.2=>Bản đồ 1.1.3=>Bản đồ 1.1.4=>Vector 1.1.5=>Thành phần 1
=> Phần 2
Bản đồ 1.2=>Bản đồ 1.2.1=>Bản đồ 1.2.2=>Bản đồ 1.2.3=>Bản đồ 1.2.4=>Vector 1.2.5=> Thành phần 1
=> Phần 2
Bản đồ 2 =>Bản đồ 1.1=>Bản đồ 1.1.1=>Bản đồ 1.1.2=>Bản đồ 1.1.3=>Bản đồ 1.1.4=>Vector 1.1.5=>Thành phần 1
=> Phần 2
Bản đồ 1.2=>Bản đồ 1.2.1=>Bản đồ 1.2.2=>Bản đồ 1.2.3=>Bản đồ 1.2.4=>Vector 1.2.5=>Thành phần 1
=> Phần 2

Vì vậy, tôi đang cố gắng thu thập tất cả phần tử 1 và phần tử 2 trong tất cả các bản đồ vào một bản đồ.

Ai đó có thể giúp tôi làm điều này mà không lặp lại rõ ràng qua từng bản đồ và dẫn đến 7 vòng lặp trong C++ không?

Cảm ơn sự giúp đỡ của bạn.

(Cập nhật: Ồ, nhìn lại 10 năm sau, thật là một cơn ác mộng mã hóa khi cố sửa mã kế thừa của người khác. Hy vọng bây giờ điều này sẽ không cần thiết :)

câu trả lời hay nhất

Tôi thích ý tưởng của @inflagranti - vì vậy, không yêu cầu tiện ích, đây là mẫu dành cho từng loại lặp lại mọi thứ. nó sử dụng is_containertừ máy in đẹp Các tính năng mà tôi sẽ không sao chép ở đây.

gia hạn: Bây giờ hoàn toàn có khả năng xử lý các loại giá trị trần và cặp.

更新 2: Lớp triển khai được đơn giản hóa nhờ @Luc Danton.

#include 

#include "prettyprint.hpp"
sử dụng không gian tên beautiful_print; // cho đặc điểm "is_container"

mẫu struct is_pair : public std::false_type { };
mẫu struct is_pair<>> : public std::true_type { };

mẫu struct Final_value { typedef T };
mẫu struct Final_value<>> { typedef T type };

mẫu void for_each_recursive(Iter bắt đầu, Iter kết thúc, F f);

mẫu struct for_each_rec_impl;

mẫu
cấu trúc for_each_rec_impl
{
mẫu
tên kiểu tĩnh std::enable_if<>::value_type>::value, void>::type
go(Iter bắt đầu, Iter kết thúc, F f)
{
for (Iter it = started; it != end; ++it) f(it->second);
}

mẫu
tên kiểu tĩnh std::enable_if::value_type>::value, void>::type
go(Iter bắt đầu, Iter kết thúc, F f)
{
for (Iter it = started; it != end; ++it) f(*it);
}
};

mẫu
cấu trúc for_each_rec_impl
{
mẫu
tên kiểu tĩnh std::enable_if<>::value_type>::value, void>::type
go(Iter bắt đầu, Iter kết thúc, F f)
{
for (Iter it = bắt đầu; nó != kết thúc; ++it)
{
for_each_recursive(it->second.begin(), it->second.end(), f);
}
}

mẫu
tên kiểu tĩnh std::enable_if::value_type>::value, void>::type
go(Iter bắt đầu, Iter kết thúc, F f)
{
for (Iter it = bắt đầu; nó != kết thúc; ++it)
{
for_each_recursive(it->begin(), it->end(), f);
}
}
};

mẫu
void for_each_recursive(Iter bắt đầu, Iter kết thúc, F f)
{
tên kiểu typedef std::iterator_traits::value_type value_type;
typedef tên kiểu Final_value::type type;

for_each_rec_impl::value>::go(bắt đầu, kết thúc, f);
}

cách sử dụng:for_each_recursive(v.begin(), v.end(), my_predicate);

Về c++ - cách duyệt bản đồ bản đồ bản đồ bản đồ bản đồ vectơ bản đồ của biểu đồ vectơ, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/7126458/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress