içerisinde en yakın veya tam anahtarı bulmak Bir süreyi bir zaman aralığına bağlayan bir arama tablosu oluşturmam gerekiyor (ikisi de veri türü çiftidir). Anahtarlar, eklendikçe doğrusal olarak artar, bu yüzden zaten sıralanacaktır (belki de bir unordered_map daha iyi olur mu?).std :: map
Aradığım şey, zaman değerini elde etmek için sağlanan geçerli uzunlukla en iyi eşleşen bir anahtarı bulmanın veya daha uzun olanı çevreleyen iki anahtarın (verilen anahtar aralarında) bulunmasını sağlamaktır. iki zaman değeri arasındaki enterpolasyonlu değeri bulabilir.
Ayrıca gerçek zamanlı olarak çağrılacağı için mümkün olan en iyi performansa ihtiyacım var.
DÜZENLEME: Aşağıdakine aşağıdaki ilk yanıtın bir yorumu vardı, ancak formatın okunması zor.
ben aşağıdakileri yapmaya çalıştım ama aynı yineleyici (5.6) dönmek gibi görünüyor:std::map<double, double> map;
map.insert(std::pair<double, double>(0.123, 0.1));
map.insert(std::pair<double, double>(2.5, 0.4));
map.insert(std::pair<double, double>(5.6, 0.8));
std::map<double, double>::iterator low, high;
double pos = 3.0;
low = map.lower_bound(pos);
high = map.upper_bound(pos);
kullandığım anahtarın daha < olan son öğeye işaret edecek 'düşük' alacağı nasıl aramak?
DÜZENLEME 2: Aptal ben, 'düşük--' ilk öğeyi sağlamayan, bunu yapacaktır.
Ulaşım :)
Bazı ek bilgiler yardımcı olabilir. Şimdiye kadar sahip olduğum şey, bir fonksiyonun l = f (t) olmasıdır. Ve onun tersi t = f^-1 (l). Ve bu veriyi bazı veri noktalarından tahmin etmeli ve enterpolasyon yapmalısınız, doğru mu? Bir arama tablosu yerine, belki sürekli güncellenen bazı yaklaşım işlevi size daha iyi hizmet edecektir. – BitTickler
Haritada sadece birkaç girişiniz varsa (5'ten az gibi), doğrusal arama normalde ilk etapta bir harita kullanmaktan daha hızlıdır. Daha fazla girdiniz varsa, arama tablosu girişlerinizi eşit zamanlı zaman değerleriyle "örneklemek" için para ödeyebilirsiniz. O zaman aramanıza gerek yoktur, ancak endeksi LUT'nizde doğru girişe hesaplayabilirsiniz. – BitTickler