Tôi biết đó là một ý tưởng rất tồi, vì vậy các đề xuất khác về cách thực hiện hiệu quả sẽ được đón nhận tốt.Trả lại một vectơ trống của chuỗi nếu không tìm thấy khóa
Đây là điều. Tôi có map<string,vector<string> >
, tôi muốn tìm kiếm khóa và trả lại giá trị tương ứng của nó (vectơ của chuỗi trong trường hợp này). Lý do tôi nhấn mạnh vào trở lại (thay vì chỉ lặp lại) là tôi cần phải tìm kiếm các giá trị trả lại trong một số vector khác.
Một ví dụ sẽ làm cho điều này rõ ràng:
Input:
key1 ---> {2,3,4}
key2 ---> {1}
key3 ---> {2,12,11,9}
Đối key1 như đầu vào, vector với các giá trị 2,3,4 nên được trả lại. Bây giờ, các giá trị 2,3,4 này cần phải được tìm kiếm trong vector khác của chuỗi. Cách hiệu quả nhất để làm điều này là gì?
tôi đã cố gắng một cái gì đó như thế này:
vector<string> returnEdges(string key)
{
for (map<string, vector<string> >::iterator it=outgoing.begin();
it!=outgoing.end();++it)
{
if (key.compare((*it).first)==0)
{
return (*it).second;
}
}
//return string<;//what should I return here????
}
1) Làm thế nào tôi nên trở về vector trống trong trường hợp chính là không tìm thấy?
2) cách tốt nhất để thực hiện điều này là gì?
Tôi hy vọng câu hỏi là rõ ràng.
EDIT: Khi tôi viết câu hỏi, tôi nghĩ tại sao không trả về một trình lặp? Những người ở SO có chấp nhận ý tưởng này không?
Tôi cảm thấy hơi lo lắng về những con trỏ thô đó. Có lẽ thiết kế đó có thể hữu ích, nhưng bằng cách nào đó phải có cách tốt hơn. OP được mời để giải thích các mục tiêu của cô ấy; có lẽ chúng ta có thể đề xuất một cái gì đó cụ thể. –
@Karl, Câu trả lời tuyệt vời tuyệt vời. Tôi nghĩ rằng đây là những vấn đề mà nhiều người như tôi, những người đến từ các ngôn ngữ khác với mặt C++ và không thể sử dụng nó hiệu quả/hiệu quả – Anon
Chuyển đổi vòng lặp sang con trỏ thô là một cách để hạn chế giao diện. Tuy nhiên, nó vẫn không ngăn việc tăng/giảm - nó chỉ có nghĩa là nó sẽ phá vỡ (hành vi không xác định ** dự kiến ** sẽ gặp sự cố bình thường, nhưng thực sự biết) thay vì cho phép người dùng bẻ khóa đóng gói mảnh bitty. Có lẽ một ý tưởng tốt hơn là tạo một lớp bao bọc - một loại con trỏ thông minh cố ý câm. :) –